Snap for 10609607 from ba73630d03f29b85f5d2f6b69689b0d5ce886829 to mainline-cellbroadcast-release

Change-Id: I6c0d9174c3144af23fcc9e78c457f7961892d447
diff --git a/.appveyor.yml b/.appveyor.yml
deleted file mode 100644
index b08c47b..0000000
--- a/.appveyor.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-# Windows Build Configuration for AppVeyor
-# http://www.appveyor.com/docs/appveyor-yml
-
-# build version format
-version: "{build}"
-
-os: Visual Studio 2015
-
-platform:
-  - x64
-
-configuration:
-  - Debug
-  - Release
-
-branches:
-  only:
-    - master
-
-# changes to these files don't need to trigger testing
-skip_commits:
-  files:
-    - README.md
-    - README-spirv-remap.txt
-    - LICENSE.txt
-    - CODE_OF_CONDUCT.md
-    - BUILD.*
-    - WORKSPACE
-    - kokoro/*
-    - make-revision
-    - Android.mk
-    - _config.yml
-
-# Travis advances the master-tot tag to current top of the tree after
-# each push into the master branch, because it relies on that tag to
-# upload build artifacts to the master-tot release. This will cause
-# double testing for each push on Appveyor: one for the push, one for
-# the tag advance. Disable testing tags.
-skip_tags: true
-
-clone_depth: 5
-
-matrix:
-  fast_finish: true # Show final status immediately if a test fails.
-
-# scripts that run after cloning repository
-install:
-  - C:/Python27/python.exe update_glslang_sources.py
-  - set PATH=C:\ninja;C:\Python36;%PATH%
-  - git clone https://github.com/google/googletest.git External/googletest
-
-build:
-  parallel: true  # enable MSBuild parallel builds
-  verbosity: minimal
-
-build_script:
-  - mkdir build && cd build
-  - cmake -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=install ..
-  - cmake --build . --config %CONFIGURATION% --target install
-
-test_script:
-  - ctest -C %CONFIGURATION% --output-on-failure
-  - cd ../Test && bash runtests
-  - cd ../build
-
-after_test:
-  # For debug build, the generated dll has a postfix "d" in its name.
-  - ps: >-
-      If ($env:configuration -Match "Debug") {
-        $env:SUFFIX="d"
-      } Else {
-        $env:SUFFIX=""
-      }
-  - cd install
-  # Zip all glslang artifacts for uploading and deploying
-  - 7z a glslang-master-windows-"%PLATFORM%"-"%CONFIGURATION%".zip
-    bin\glslangValidator.exe
-    bin\spirv-remap.exe
-    include\glslang\*
-    lib\GenericCodeGen%SUFFIX%.lib
-    lib\glslang%SUFFIX%.lib
-    lib\glslang-default-resource-limits%SUFFIX%.lib
-    lib\HLSL%SUFFIX%.lib
-    lib\MachineIndependent%SUFFIX%.lib
-    lib\OGLCompiler%SUFFIX%.lib
-    lib\OSDependent%SUFFIX%.lib
-    lib\SPIRV%SUFFIX%.lib
-    lib\SPVRemapper%SUFFIX%.lib
-    lib\SPIRV-Tools%SUFFIX%.lib
-    lib\SPIRV-Tools-opt%SUFFIX%.lib
-
-artifacts:
-  - path: build\install\*.zip
-    name: artifacts-zip
-
-deploy:
-  - provider: GitHub
-    auth_token:
-      secure: YglcSYdl0TylEa59H4K6lylBEDr586NAt2EMgZquSo+iuPrwgZQuJLPCoihSm9y6
-    release: master-tot
-    description: "Continuous build of the latest master branch by Appveyor and Github"
-    artifact: artifacts-zip
-    draft: false
-    prerelease: false
-    force_update: true
-    on:
-      branch: master
-      APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml
index c375ac4..6425a04 100644
--- a/.github/workflows/continuous_deployment.yml
+++ b/.github/workflows/continuous_deployment.yml
@@ -20,11 +20,26 @@
     workflow_dispatch:
     push:
         branches:
-            - master
+            - main
+        paths-ignore:
+            - 'README.md'
+            - 'README-spirv-remap.txt'
+            - 'LICENSE.txt'
+            - 'CODE_OF_CONDUCT.md'
+            - 'BUILD.*'
+            - 'WORKSPACE'
+            - 'kokoro/*'
+            - 'make-revision'
+            - 'Android.mk'
+            - '_config.yml'
+
+permissions: read-all
 
 jobs:
     linux:
         runs-on: ${{matrix.os.genus}}
+        permissions:
+            contents: write
         strategy:
             fail-fast: false
             matrix:
@@ -32,8 +47,8 @@
                 compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
                 cmake_build_type: [Debug, Release]
         steps:
-            - uses: actions/checkout@v2
-            - uses: actions/setup-python@v2
+            - uses: actions/checkout@v3
+            - uses: actions/setup-python@v4
               with:
                   python-version: '3.7'
             - name: Install Ubuntu Package Dependencies
@@ -71,7 +86,7 @@
             - name: Zip
               if: ${{ matrix.compiler.cc == 'clang' }}
               env:
-                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+                  ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
               run: |
                   cd build/install
                   zip ${ARCHIVE} \
@@ -92,8 +107,8 @@
             - name: Deploy
               if: ${{ matrix.compiler.cc == 'clang' }}
               env:
-                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
-              uses: actions/github-script@v5
+                  ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+              uses: actions/github-script@v6
               with:
                   script: |
                       const script = require('.github/workflows/deploy.js')
@@ -101,6 +116,8 @@
 
     macos:
         runs-on: ${{matrix.os.genus}}
+        permissions:
+            contents: write
         strategy:
             fail-fast: false
             matrix:
@@ -108,8 +125,8 @@
                 compiler: [{cc: clang, cxx: clang++}]
                 cmake_build_type: [Debug, Release]
         steps:
-            - uses: actions/checkout@v2
-            - uses: actions/setup-python@v2
+            - uses: actions/checkout@v3
+            - uses: actions/setup-python@v4
               with:
                   python-version: '3.7'
             - name: Install GoogleTest
@@ -142,7 +159,7 @@
                   cd ../Test && ./runtests
             - name: Zip
               env:
-                  ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+                  ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
               run: |
                   cd build/install
                   zip ${ARCHIVE} \
@@ -162,8 +179,97 @@
                       lib/libSPIRV-Tools-opt.a
             - name: Deploy
               env:
+                  ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
+              uses: actions/github-script@v6
+              with:
+                  script: |
+                      const script = require('.github/workflows/deploy.js')
+                      await script({github, context, core})
+
+    windows:
+        runs-on: ${{matrix.os.genus}}
+        permissions:
+            contents: write
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [{genus: windows-2019, family: windows}]
+                cmake_build_type: [Debug, Release]
+        steps:
+            - uses: actions/checkout@v3
+            - uses: actions/setup-python@v4
+              with:
+                  python-version: '3.7'
+            - name: Install GoogleTest
+              run: |
+                  # check out pre-breakage version of googletest; can be deleted when
+                  # issue 3128 is fixed
+                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
+                  mkdir -p External/googletest
+                  cd External/googletest
+                  git init
+                  git remote add origin https://github.com/google/googletest.git
+                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
+                  git reset --hard FETCH_HEAD
+                  cd ../..
+            - name: Update Glslang Sources
+              run: |
+                  python update_glslang_sources.py
+            - name: Build
+              run: |
+                  cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install"
+                  cmake --build build --config ${{matrix.cmake_build_type}} --target install
+            - name: Test
+              run: |
+                  cd build
+                  ctest -C ${{matrix.cmake_build_type}} --output-on-failure
+                  cd ../Test && bash runtests
+            - name: Zip
+              if: ${{ matrix.cmake_build_type == 'Debug' }}
+              env:
+                  ARCHIVE: glslang-master-${{matrix.os.family}}-Debug.zip
+              run: |
+                  cd build/install
+                  7z a ${{env.ARCHIVE}} `
+                      bin/glslangValidator.exe `
+                      bin/spirv-remap.exe `
+                      include/glslang/* `
+                      lib/GenericCodeGend.lib `
+                      lib/glslangd.lib `
+                      lib/glslang-default-resource-limitsd.lib `
+                      lib/HLSLd.lib `
+                      lib/MachineIndependentd.lib `
+                      lib/OGLCompilerd.lib `
+                      lib/OSDependentd.lib `
+                      lib/SPIRVd.lib `
+                      lib/SPVRemapperd.lib `
+                      lib/SPIRV-Toolsd.lib `
+                      lib/SPIRV-Tools-optd.lib
+            - name: Zip
+              if: ${{ matrix.cmake_build_type == 'Release' }}
+              env:
+                  ARCHIVE: glslang-master-${{matrix.os.family}}-Release.zip
+              run: |
+                  cd build/install
+                  7z a ${{env.ARCHIVE}} `
+                      bin/glslangValidator.exe `
+                      bin/spirv-remap.exe `
+                      include/glslang/* `
+                      lib/GenericCodeGen.lib `
+                      lib/glslang.lib `
+                      lib/glslang-default-resource-limits.lib `
+                      lib/HLSL.lib `
+                      lib/MachineIndependent.lib `
+                      lib/OGLCompiler.lib `
+                      lib/OSDependent.lib `
+                      lib/SPIRV.lib `
+                      lib/SPVRemapper.lib `
+                      lib/SPIRV-Tools.lib `
+                      lib/SPIRV-Tools-opt.lib
+            - name: Deploy
+              env:
                   ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
-              uses: actions/github-script@v5
+              uses: actions/github-script@v6
               with:
                   script: |
                       const script = require('.github/workflows/deploy.js')
diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml
index 7c36c68..6ca8607 100644
--- a/.github/workflows/continuous_integration.yml
+++ b/.github/workflows/continuous_integration.yml
@@ -10,7 +10,9 @@
     workflow_dispatch:
     pull_request:
         branches:
-            - master
+            - main
+
+permissions: read-all
 
 jobs:
     linux:
@@ -64,12 +66,56 @@
         strategy:
             fail-fast: false
             matrix:
-                os: [macos-11]
-                compiler: [{cc: clang, cxx: clang++}]
+                os: [macos-11, macos-12]
+                compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
                 cmake_build_type: [Debug, Release]
         steps:
-            - uses: actions/checkout@v2
-            - uses: actions/setup-python@v2
+            - uses: actions/checkout@v3
+            - uses: actions/setup-python@v3
+              with:
+                  python-version: '3.7'
+            - uses: lukka/get-cmake@latest
+            - name: Install GoogleTest
+              run: |
+                  # check out pre-breakage version of googletest; can be deleted when
+                  # issue 3128 is fixed
+                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
+                  mkdir -p External/googletest
+                  cd External/googletest
+                  git init
+                  git remote add origin https://github.com/google/googletest.git
+                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
+                  git reset --hard FETCH_HEAD
+                  cd ../..
+            - name: Update Glslang Sources
+              run: ./update_glslang_sources.py
+            - name: Configure
+              run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -G "Ninja"
+              env:
+                  CC: ${{matrix.compiler.cc}}
+                  CXX: ${{matrix.compiler.cxx}}
+            - name: Build
+              run: cmake --build build
+            - name: Install
+              run: cmake --install build --prefix build/install
+            - name: Test
+              run: |
+                  cd build
+                  ctest --output-on-failure &&
+                  cd ../Test && ./runtests
+
+    windows:
+        runs-on: ${{matrix.os.genus}}
+        permissions:
+            contents: write
+        strategy:
+            fail-fast: false
+            matrix:
+                os: [{genus: windows-2019, family: windows}]
+                cmake_build_type: [Debug, Release]
+        steps:
+            - uses: actions/checkout@v3
+            - uses: actions/setup-python@v4
               with:
                   python-version: '3.7'
             - name: Install GoogleTest
@@ -86,20 +132,16 @@
                   cd ../..
             - name: Update Glslang Sources
               run: |
-                  ./update_glslang_sources.py
+                  python 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
+                  cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install"
+                  cmake --build build --config ${{matrix.cmake_build_type}} --target install
             - name: Test
               run: |
                   cd build
-                  ctest --output-on-failure &&
-                  cd ../Test && ./runtests
+                  ctest -C ${{matrix.cmake_build_type}} --output-on-failure
+                  cd ../Test && bash runtests
 
     android:
         runs-on: ${{matrix.os}}
diff --git a/.github/workflows/deploy.js b/.github/workflows/deploy.js
index 9f8d242..3f1b7e4 100644
--- a/.github/workflows/deploy.js
+++ b/.github/workflows/deploy.js
@@ -3,11 +3,11 @@
         await github.rest.git.updateRef({
             owner: context.repo.owner,
             repo: context.repo.repo,
-            ref: 'tags/master-tot',
+            ref: 'tags/main-tot',
             sha: context.sha
         })
     } catch (error) {
-        core.setFailed(`upload master-tot tag; ${error.name}; ${error.message}`)
+        core.setFailed(`upload main-tot tag; ${error.name}; ${error.message}`)
     }
 
     let release
@@ -15,10 +15,10 @@
         release = await github.rest.repos.getReleaseByTag({
             owner: context.repo.owner,
             repo: context.repo.repo,
-            tag: 'master-tot'
+            tag: 'main-tot'
         })
     } catch (error) {
-        core.setFailed(`get the master release; ${error.name}; ${error.message}`)
+        core.setFailed(`get the main release; ${error.name}; ${error.message}`)
     }
 
     try {
@@ -28,7 +28,7 @@
             release_id: release.data.id
         })
     } catch (error) {
-        core.setFailed(`update the master release; ${error.name}; ${error.message}`)
+        core.setFailed(`update the main release; ${error.name}; ${error.message}`)
     }
 
     let release_assets
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 0000000..946b240
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1,3 @@
+Faith Ekstrand <faith.ekstrand@collabora.com> <jason@jlekstrand.net>
+Faith Ekstrand <faith.ekstrand@collabora.com> <jason.ekstrand@intel.com>
+Faith Ekstrand <faith.ekstrand@collabora.com> <jason.ekstrand@collabora.com>
diff --git a/BUILD.bazel b/BUILD.bazel
deleted file mode 100644
index 12168fa..0000000
--- a/BUILD.bazel
+++ /dev/null
@@ -1,311 +0,0 @@
-# Copyright (C) 2020 The Khronos Group Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of The Khronos Group Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-package(
-    default_visibility = ["//visibility:public"],
-)
-
-# Description:
-#
-# Khronos reference front-end for GLSL and ESSL, and sample SPIR-V generator.
-
-licenses(["notice"])
-
-exports_files(["LICENSE"])
-
-# Build information generation script
-py_binary(
-    name = "build_info",
-    srcs = ["build_info.py"],
-)
-
-py_binary(
-    name = "gen_extension_headers",
-    srcs = ["gen_extension_headers.py"],
-)
-
-genrule(
-    name = "gen_build_info_h",
-    srcs = ["CHANGES.md", "build_info.h.tmpl"],
-    outs = ["glslang/build_info.h"],
-    cmd_bash = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
-    cmd_bat = "for %F in ($(location CHANGES.md)) do $(location build_info) %~dpF -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
-    tools = [":build_info"],
-)
-
-genrule(
-    name = "gen_extension_headers_h",
-    srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"],
-    outs = ["glslang/glsl_intrinsic_header.h"],
-    cmd_bash = "$(location gen_extension_headers) -i  $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)",
-    tools = [":gen_extension_headers"],
-)
-
-COMMON_COPTS = select({
-    "@bazel_tools//src/conditions:windows": [""],
-    "//conditions:default": [
-        "-Wall",
-        "-Wuninitialized",
-        "-Wunused",
-        "-Wunused-local-typedefs",
-        "-Wunused-parameter",
-        "-Wunused-value",
-        "-Wunused-variable",
-        "-Wno-reorder",
-        "-std=c++11",
-        "-fvisibility=hidden",
-        "-fvisibility-inlines-hidden",
-        "-fno-exceptions",
-        "-fno-rtti",
-    ],
-})
-
-cc_library(
-    name = "glslang",
-    srcs = glob(
-        [
-            "glslang/GenericCodeGen/*.cpp",
-            "glslang/HLSL/*.cpp",
-            "glslang/MachineIndependent/*.cpp",
-            "glslang/MachineIndependent/preprocessor/*.cpp",
-        ],
-        exclude = [
-            "glslang/HLSL/pch.h",
-            "glslang/MachineIndependent/pch.h",
-        ],
-    ) + [
-        "OGLCompilersDLL/InitializeDll.cpp",
-    ] + select({
-        "@bazel_tools//src/conditions:windows":
-            ["glslang/OSDependent/Windows/ossource.cpp"],
-        "//conditions:default":
-            ["glslang/OSDependent/Unix/ossource.cpp"],
-    }),
-    hdrs = glob([
-        "glslang/HLSL/*.h",
-        "glslang/Include/*.h",
-        "glslang/MachineIndependent/*.h",
-        "glslang/MachineIndependent/preprocessor/*.h",
-    ]) + [
-        "OGLCompilersDLL/InitializeDll.h",
-        "StandAlone/DirStackFileIncluder.h",
-        "glslang/OSDependent/osinclude.h",
-        "glslang/Public/ShaderLang.h",
-        ":gen_build_info_h",
-    ],
-    copts = COMMON_COPTS,
-    defines = [
-        "AMD_EXTENSIONS",
-        "ENABLE_HLSL=0",
-        "ENABLE_OPT=0",
-        "NV_EXTENSIONS",
-    ],
-    linkopts = select({
-        "@bazel_tools//src/conditions:windows": [""],
-        "//conditions:default": ["-lm", "-lpthread"],
-    }),
-    linkstatic = 1,
-)
-
-genrule(
-    name = "export_spirv_headers",
-    srcs = [
-        "SPIRV/GLSL.ext.AMD.h",
-        "SPIRV/GLSL.ext.EXT.h",
-        "SPIRV/GLSL.ext.KHR.h",
-        "SPIRV/GLSL.ext.NV.h",
-        "SPIRV/GLSL.std.450.h",
-        "SPIRV/NonSemanticDebugPrintf.h",
-        "SPIRV/NonSemanticShaderDebugInfo100.h",
-        "SPIRV/spirv.hpp",
-    ],
-    outs = [
-        "include/SPIRV/GLSL.ext.AMD.h",
-        "include/SPIRV/GLSL.ext.EXT.h",
-        "include/SPIRV/GLSL.ext.KHR.h",
-        "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/",
-    cmd_bat = "(if not exist $(@D)\\include\\SPIRV mkdir $(@D)\\include\\SPIRV) && (for %S in ($(SRCS)) do @xcopy /q %S $(@D)\\include\\SPIRV\\ >NUL)",
-)
-
-cc_library(
-    name = "SPIRV_headers",
-    hdrs = [":export_spirv_headers"],
-    copts = COMMON_COPTS,
-    includes = [
-        "include",
-        "include/SPIRV",
-    ],
-    linkstatic = 1,
-)
-
-cc_library(
-    name = "SPIRV",
-    srcs = glob(
-        ["SPIRV/*.cpp"],
-        exclude = [
-            "SPIRV/SpvTools.cpp",
-        ],
-    ),
-    hdrs = [
-        "SPIRV/GlslangToSpv.h",
-        "SPIRV/Logger.h",
-        "SPIRV/SPVRemapper.h",
-        "SPIRV/SpvBuilder.h",
-        "SPIRV/SpvTools.h",
-        "SPIRV/bitutils.h",
-        "SPIRV/disassemble.h",
-        "SPIRV/doc.h",
-        "SPIRV/hex_float.h",
-        "SPIRV/spvIR.h",
-    ],
-    copts = COMMON_COPTS,
-    includes = ["SPIRV"],
-    linkopts = select({
-        "@bazel_tools//src/conditions:windows": [""],
-        "//conditions:default": ["-lm"],
-    }),
-    linkstatic = 1,
-    deps = [
-        ":SPIRV_headers",
-        ":glslang",
-    ],
-)
-
-cc_library(
-    name = "glslang-default-resource-limits",
-    srcs = ["StandAlone/ResourceLimits.cpp"],
-    hdrs = ["StandAlone/ResourceLimits.h"],
-    copts = COMMON_COPTS,
-    linkstatic = 1,
-    deps = [":glslang"],
-)
-
-cc_binary(
-    name = "glslangValidator",
-    srcs = [
-        "StandAlone/StandAlone.cpp",
-        "StandAlone/Worklist.h",
-        ":glslang/glsl_intrinsic_header.h"
-    ],
-    copts = COMMON_COPTS,
-    deps = [
-        ":SPIRV",
-        ":glslang",
-        ":glslang-default-resource-limits",
-    ],
-)
-
-cc_binary(
-    name = "spirv-remap",
-    srcs = ["StandAlone/spirv-remap.cpp"],
-    copts = COMMON_COPTS,
-    deps = [
-        ":SPIRV",
-        ":glslang",
-        ":glslang-default-resource-limits",
-    ],
-)
-
-filegroup(
-    name = "test_files",
-    srcs = glob(
-        ["Test/**"],
-        exclude = [
-            "Test/bump",
-            "Test/glslangValidator",
-            "Test/runtests",
-        ],
-    ),
-)
-
-cc_library(
-    name = "glslang_test_lib",
-    testonly = 1,
-    srcs = [
-        "gtests/HexFloat.cpp",
-        "gtests/Initializer.h",
-        "gtests/Settings.cpp",
-        "gtests/Settings.h",
-        "gtests/TestFixture.cpp",
-        "gtests/TestFixture.h",
-        "gtests/main.cpp",
-    ],
-    copts = COMMON_COPTS,
-    data = [":test_files"],
-    defines = select({
-        # Unfortunately we can't use $(location) in cc_library at the moment.
-        # See https://github.com/bazelbuild/bazel/issues/1023
-        # So we'll specify the path manually.
-        "@bazel_tools//src/conditions:windows":
-            ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"],
-        "//conditions:default":
-            ["GLSLANG_TEST_DIRECTORY='\"Test\"'"],
-    }),
-    linkstatic = 1,
-    deps = [
-        ":SPIRV",
-        ":glslang",
-        ":glslang-default-resource-limits",
-        "@com_google_googletest//:gtest",
-    ],
-)
-
-GLSLANG_TESTS = glob(
-    ["gtests/*.FromFile.cpp"],
-    # Since we are not building the SPIRV-Tools dependency, the following tests
-    # cannot be performed.
-    exclude = [
-        "gtests/Hlsl.FromFile.cpp",
-        "gtests/Spv.FromFile.cpp",
-    ],
-)
-
-[cc_test(
-    name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test",
-    srcs = [test_file],
-    copts = COMMON_COPTS,
-    data = [
-        ":test_files",
-    ],
-    deps = [
-        ":SPIRV",
-        ":glslang",
-        ":glslang_test_lib",
-    ],
-) for test_file in GLSLANG_TESTS]
diff --git a/BUILD.gn b/BUILD.gn
index 29328d4..85a4bed 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -96,9 +96,6 @@
 }
 
 spirv_tools_dir = glslang_spirv_tools_dir
-if (!defined(glslang_angle)) {
-  glslang_angle = false
-}
 
 config("glslang_public") {
   include_dirs = [ "." ]
@@ -126,6 +123,7 @@
       "SPIRV/GLSL.ext.EXT.h",
       "SPIRV/GLSL.ext.KHR.h",
       "SPIRV/GLSL.ext.NV.h",
+      "SPIRV/GLSL.ext.ARM.h",
       "SPIRV/GLSL.std.450.h",
       "SPIRV/GlslangToSpv.cpp",
       "SPIRV/GlslangToSpv.h",
@@ -242,9 +240,6 @@
       sources += [ "SPIRV/SpvTools.cpp" ]
       defines += [ "ENABLE_OPT=1" ]
     }
-    if (invoker.is_angle) {
-      defines += [ "GLSLANG_ANGLE" ]
-    }
 
     if (is_win) {
       sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
@@ -293,21 +288,19 @@
 }
 
 glslang_sources_common("glslang_lib_sources") {
-  enable_opt = !glslang_angle
-  enable_hlsl = !glslang_angle
-  is_angle = glslang_angle
+  enable_opt = true
+  enable_hlsl = true
 }
 
 glslang_sources_common("glslang_sources") {
   enable_opt = true
   enable_hlsl = true
-  is_angle = false
 }
 
 source_set("glslang_default_resource_limits_sources") {
   sources = [
-    "StandAlone/ResourceLimits.cpp",
-    "StandAlone/ResourceLimits.h",
+    "glslang/ResourceLimits/ResourceLimits.cpp",
+    "glslang/Public/ResourceLimits.h",
     "glslang/Include/ResourceLimits.h",
   ]
   public_configs = [ ":glslang_public" ]
diff --git a/CHANGES.md b/CHANGES.md
index e7b6f14..4372a3c 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -3,6 +3,61 @@
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](https://semver.org/).
 
+## 12.3.0 2023-07-19
+
+### Other changes
+* Rename glslangValidator to glslang and create glslangValidator symlink
+* Support HLSL binary literals
+* Add missing initialization members for web
+* Improve push_constant upgrading
+* Fix race condition in spirv remap
+* Support pre and post HLSL qualifier validation
+* Force generateDebugInfo when non-semantic debug info is enabled
+* Exit with error if output file cannot be written
+* Fix struct member buffer reference decorations
+
+## 12.2.0 2023-05-17
+
+### Other changes
+* Support GLSL_EXT_shader_tile_image
+* Support GL_EXT_ray_tracing_position_fetch
+* Support custom include callbacks via the C API
+* Add preamble-text command-line option
+* Accept variables as parameters of spirv_decorate_id
+* Fix generation of conditionals with a struct result
+* Fix double expansion of macros
+* Fix DebugCompilationUnit scope
+* Improve line information
+
+## 12.1.0 2023-03-21
+
+### Other changes
+* Reject non-float inputs/outputs for version less than 120
+* Fix invalid BufferBlock decoration for SPIR-V 1.3 and above
+* Add HLSL relaxed-precision float/int matrix expansions
+* Block decorate Vulkan structs with RuntimeArrays
+* Support InterlockedAdd on float types
+
+## 12.0.0 2023-01-18
+
+### Breaking changes
+* An ABI was accidentally broken in #3014. Consequently, we have incremented the major revision number.
+
+### Other changes
+* Add support for ARB_bindless_texture.
+* Add support for GL_NV_shader_invocation_reorder.
+* Fix const parameter debug types when using NonSemantic.Shader.DebugInfo.100.
+* Fix NonSemantic.Shader.DebugInfo.100 disassembly.
+* Fix MaxDualSourceDrawBuffersEXT usage.
+* Fix structure member reference crash.
+
+## 11.13.0 2022-12-06
+
+### Other changes
+* Make HelperInvocation accesses volatile for SPIR-V 1.6.
+* Improve forward compatibility of ResourceLimits interface 
+* Remove GLSLANG_ANGLE
+
 ## 11.12.0 2022-10-12
 
 ### Other changes
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b581c84..72f5f88 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,24 +30,11 @@
 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
-
-# increase to 3.1 once all major distributions
-# include a version of CMake >= 3.1
 cmake_minimum_required(VERSION 3.14.0)
-if (POLICY CMP0048)
-  cmake_policy(SET CMP0048 NEW)
-endif()
-if(POLICY CMP0054)
-  cmake_policy(SET CMP0054 NEW)
-endif()
-
-project(glslang LANGUAGES CXX)
+project(glslang)
 
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
-# Enable compile commands database
-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-
 # Adhere to GNU filesystem layout conventions
 include(GNUInstallDirs)
 include(CMakePackageConfigHelpers)
@@ -78,7 +65,7 @@
 endif()
 option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" ON)
 
-option(ENABLE_GLSLANG_BINARIES "Builds glslangValidator and spirv-remap" ON)
+option(ENABLE_GLSLANG_BINARIES "Builds glslang and spirv-remap" ON)
 
 option(ENABLE_GLSLANG_JS
     "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing." OFF)
@@ -117,18 +104,6 @@
 endif()
 option(ENABLE_CTEST "Enables testing" ON)
 
-if(ENABLE_GLSLANG_INSTALL AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
-    set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
-endif()
-
-option(USE_CCACHE "Use ccache" OFF)
-if(USE_CCACHE)
-    find_program(CCACHE_FOUND ccache)
-    if(CCACHE_FOUND)
-        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
-    endif()
-endif()
-
 if(ENABLE_CTEST)
     include(CTest)
 endif()
@@ -151,7 +126,7 @@
         include(ChooseMSVCCRT.cmake)
     endif()
     add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
-elseif(UNIX)
+elseif(UNIX OR ANDROID)
     add_definitions(-DGLSLANG_OSINCLUDE_UNIX)
 else()
     message("unknown platform")
@@ -160,7 +135,6 @@
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
     add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
                         -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
-    add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
     if(NOT ENABLE_RTTI)
         add_compile_options(-fno-rtti)
     endif()
@@ -171,16 +145,13 @@
         add_compile_options(-Werror=deprecated-copy)
     endif()
 
-    if(NOT CMAKE_VERSION VERSION_LESS "3.13" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+    if(NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
         # Error if there's symbols that are not found at link time.
-        # add_link_options() 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,--no-undefined")
     endif()
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
     add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
                         -Wunused-parameter -Wunused-value  -Wunused-variable)
-    add_compile_options(-Wno-reorder)  # disable this from -Wall, since it happens all over.
     if(NOT ENABLE_RTTI)
         add_compile_options(-fno-rtti)
     endif()
@@ -188,14 +159,12 @@
         add_compile_options(-fno-exceptions)
     endif()
 
-    if(NOT CMAKE_VERSION VERSION_LESS "3.13")
+    if(NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
         # 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.
-        if (WIN32)
-            add_link_options("-Wl,--no-undefined")
-        else()
+        if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
             add_link_options("-Wl,-undefined,error")
+        elseif(NOT APPLE)
+            add_link_options("-Wl,--no-undefined")
         endif()
     endif()
 elseif(MSVC)
@@ -227,21 +196,16 @@
     endif()
 endif()
 
-# Request C++11
-if(${CMAKE_VERSION} VERSION_LESS 3.1)
-    # CMake versions before 3.1 do not understand CMAKE_CXX_STANDARD
-    # remove this block once CMake >=3.1 has fixated in the ecosystem
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-else()
-    set(CMAKE_CXX_STANDARD 11)
-    set(CMAKE_CXX_STANDARD_REQUIRED ON)
-    set(CMAKE_CXX_EXTENSIONS OFF)
-endif()
+# Request C++17
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
 
 function(glslang_set_link_args TARGET)
     # For MinGW compiles, statically link against the GCC and C++ runtimes.
     # This avoids the need to ship those runtimes as DLLs.
-    if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+    # This is supported by GCC and Clang.
+    if(WIN32 AND NOT MSVC)
         set_target_properties(${TARGET} PROPERTIES
                               LINK_FLAGS "-static -static-libgcc -static-libstdc++")
     endif()
@@ -313,7 +277,7 @@
 endif()
 
 if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
-    find_host_package(PythonInterp 3 REQUIRED)
+    find_host_package(Python3 REQUIRED)
 
     # We depend on these for later projects, so they should come first.
     add_subdirectory(External)
@@ -355,12 +319,12 @@
     endif()
 
     if (CMAKE_CONFIGURATION_TYPES)
-        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/localResults)
-        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/glslangValidator)
-        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/spirv-remap)
+        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/localResults)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIG>/glslang)
+        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIG>/spirv-remap)
     else()
         set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
-        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)
+        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslang)
         set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
     endif()
 
@@ -372,10 +336,18 @@
 if(ENABLE_GLSLANG_INSTALL)
     file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" [=[
         @PACKAGE_INIT@
+        @INSTALL_CONFIG_UNIX@
         include("@PACKAGE_PATH_EXPORT_TARGETS@")
     ]=])
-    
+
     set(PATH_EXPORT_TARGETS "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake")
+    if(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia")
+        set(INSTALL_CONFIG_UNIX [=[
+            include(CMakeFindDependencyMacro)
+            set(THREADS_PREFER_PTHREAD_FLAG ON)
+            find_dependency(Threads REQUIRED)
+        ]=])
+    endif()
     configure_package_config_file(
         "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in"
         "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake"
@@ -402,4 +374,4 @@
         DESTINATION
             "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
     )
-endif()
\ No newline at end of file
+endif()
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
index b44cbc7..71a5675 100644
--- a/OGLCompilersDLL/CMakeLists.txt
+++ b/OGLCompilersDLL/CMakeLists.txt
@@ -49,7 +49,7 @@
         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\")
+            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
         endif()
 
         add_library(OGLCompiler ALIAS glslang::OGLCompiler)
diff --git a/OGLCompilersDLL/InitializeDll.cpp b/OGLCompilersDLL/InitializeDll.cpp
index abea910..9d81f57 100644
--- a/OGLCompilersDLL/InitializeDll.cpp
+++ b/OGLCompilersDLL/InitializeDll.cpp
@@ -102,7 +102,7 @@
         return false;
     }
 
-    if (OS_GetTLSValue(ThreadInitializeIndex) != 0)
+    if (OS_GetTLSValue(ThreadInitializeIndex) != nullptr)
         return true;
 
     if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {
@@ -130,8 +130,8 @@
     //
     // Function is re-entrant and this thread may not have been initialized.
     //
-    if (OS_GetTLSValue(ThreadInitializeIndex) != 0) {
-        if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) {
+    if (OS_GetTLSValue(ThreadInitializeIndex) != nullptr) {
+        if (!OS_SetTLSValue(ThreadInitializeIndex, nullptr)) {
             assert(0 && "DetachThread(): Unable to clear init flag.");
             success = false;
         }
diff --git a/README-spirv-remap.txt b/README-spirv-remap.txt
index 3e5288a..f3efee8 100644
--- a/README-spirv-remap.txt
+++ b/README-spirv-remap.txt
@@ -112,7 +112,7 @@
 
 BUILDING
 --------------------------------------------------------------------------------
-The standalone remapper is built along side glslangValidator through its
+The standalone remapper is built along side glslang through its
 normal build process.
 
 
diff --git a/README.md b/README.md
index 5e642e6..8ebf940 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,17 @@
 # News
 
-1. Visual Studio 2013 is no longer supported
+1. [As discussed in #3107](https://github.com/KhronosGroup/glslang/issues/3107), the default branch of this repository is now 'main'. This change should be transparent to repository users, since github rewrites many references to the old 'master' branch to 'main'. However, if you have a checked-out local clone, you may wish to take the following steps as recommended by github:
 
-   [As scheduled](https://github.com/KhronosGroup/glslang/blob/9eef54b2513ca6b40b47b07d24f453848b65c0df/README.md#planned-deprecationsremovals),
-Microsoft Visual Studio 2013 is no longer officially supported. \
-   Please upgrade to at least Visual Studio 2015.
+```sh
+git branch -m master main
+git fetch origin
+git branch -u origin/main main
+git remote set-head origin -a
+```
 
-2. The versioning scheme is being improved, and you might notice some differences.  This is currently WIP, but will be coming soon.  See, for example, PR #2277.
+2. C++17 (all platforms) and Visual Studio 2019 (Windows) are now required. This change was driven by the external dependency on SPIRV-Tools.
 
-3. If you get a new **compilation error due to a missing header**, it might be caused by this planned removal:
-
-**SPIRV Folder, 1-May, 2020.** Glslang, when installed through CMake,
-will install a `SPIRV` folder into `${CMAKE_INSTALL_INCLUDEDIR}`.
-This `SPIRV` folder is being moved to `glslang/SPIRV`.
-During the transition the `SPIRV` folder will be installed into both locations.
-The old install of `SPIRV/` will be removed as a CMake install target no sooner than May 1, 2020.
-See issue #1964.
-
-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.
-
-[![appveyor 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/main?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/main)
 ![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg)
 
 # Glslang Components and Status
@@ -55,7 +47,7 @@
 
 ### Standalone Wrapper
 
-`glslangValidator` is command-line tool for accessing the functionality above.
+`glslang` is command-line tool for accessing the functionality above.
 
 Status: Complete.
 
@@ -73,7 +65,7 @@
 
 ## Execution of Standalone Wrapper
 
-To use the standalone binary form, execute `glslangValidator`, and it will print
+To use the standalone binary form, execute `glslang`, and it will print
 a usage statement.  Basic operation is to give it a file containing a shader,
 and it will print out warnings/errors and optionally an AST.
 
@@ -99,15 +91,15 @@
 ## Building (CMake)
 
 Instead of building manually, you can also download the binaries for your
-platform directly from the [master-tot release][master-tot-release] on GitHub.
+platform directly from the [main-tot release][main-tot-release] on GitHub.
 Those binaries are automatically uploaded by the buildbots after successful
-testing and they always reflect the current top of the tree of the master
+testing and they always reflect the current top of the tree of the main
 branch.
 
 ### Dependencies
 
-* A C++11 compiler.
-  (For MSVS: use 2015 or later.)
+* A C++17 compiler.
+  (For MSVS: use 2019 or later.)
 * [CMake][cmake]: for generating compilation targets.
 * make: _Linux_, ninja is an alternative, if configured.
 * [Python 3.x][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools and the 'External' subdirectory does not exist.)
@@ -433,9 +425,18 @@
 
 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)
-{
+```c
+#include <glslang/Include/glslang_c_interface.h>
+
+// Required for use of glslang_default_resource
+#include <glslang/Public/resource_limits_c.h>
+
+typedef struct SpirVBinary {
+    uint32_t *words; // SPIR-V words
+    int size; // number of words in SPIR-V binary
+} SpirVBinary;
+
+SpirVBinary compileShaderToSPIRV_Vulkan(glslang_stage_t stage, const char* shaderSource, const char* fileName) {
     const glslang_input_t input = {
         .language = GLSLANG_SOURCE_GLSL,
         .stage = stage,
@@ -449,18 +450,22 @@
         .force_default_version_and_profile = false,
         .forward_compatible = false,
         .messages = GLSLANG_MSG_DEFAULT_BIT,
-        .resource = reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource),
+        .resource = glslang_default_resource(),
     };
 
     glslang_shader_t* shader = glslang_shader_create(&input);
 
+    SpirVBinary bin = {
+        .words = NULL,
+        .size = 0,
+    };
     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>();
+        return bin;
     }
 
     if (!glslang_shader_parse(shader, &input)) {
@@ -469,7 +474,7 @@
         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>();
+        return bin;
     }
 
     glslang_program_t* program = glslang_program_create();
@@ -481,13 +486,14 @@
         printf("%s\n", glslang_program_get_info_debug_log(program));
         glslang_program_delete(program);
         glslang_shader_delete(shader);
-        return std::vector<uint32_t>();
+        return bin;
     }
 
     glslang_program_SPIRV_generate(program, stage);
 
-    std::vector<uint32_t> outShaderModule(glslang_program_SPIRV_get_size(program));
-    glslang_program_SPIRV_get(program, outShaderModule.data());
+    bin.size = glslang_program_SPIRV_get_size(program);
+    bin.words = malloc(bin.size * sizeof(uint32_t));
+    glslang_program_SPIRV_get(program, bin.words);
 
     const char* spirv_messages = glslang_program_SPIRV_get_messages(program);
     if (spirv_messages)
@@ -496,7 +502,7 @@
     glslang_program_delete(program);
     glslang_shader_delete(shader);
 
-    return outShaderModule;
+    return bin;
 }
 ```
 
@@ -555,4 +561,4 @@
 [bison]: https://www.gnu.org/software/bison/
 [googletest]: https://github.com/google/googletest
 [bison-gnu-win32]: http://gnuwin32.sourceforge.net/packages/bison.htm
-[master-tot-release]: https://github.com/KhronosGroup/glslang/releases/tag/master-tot
+[main-tot-release]: https://github.com/KhronosGroup/glslang/releases/tag/main-tot
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..ffa39bf
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,6 @@
+# Security Policy
+
+To report a security issue, please disclose it at [security advisory](https://github.com/KhronosGroup/glslang/security/advisories/new).
+
+This project is maintained by a team of volunteers on a reasonable-effort basis. As
+such, please give us at least 90 days to work on a fix before public exposure.
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index 2408e4c..a80e74e 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -62,6 +62,7 @@
     disassemble.h
     GLSL.ext.AMD.h
     GLSL.ext.NV.h
+    GLSL.ext.ARM.h
     NonSemanticDebugPrintf.h
     NonSemanticShaderDebugInfo100.h)
 
@@ -70,8 +71,11 @@
     doc.h)
 
 add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
-set_property(TARGET SPIRV PROPERTY FOLDER glslang)
-set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON)
+set_target_properties(SPIRV PROPERTIES
+    FOLDER glslang
+    POSITION_INDEPENDENT_CODE ON
+    VERSION   "${GLSLANG_VERSION}"
+    SOVERSION "${GLSLANG_VERSION_MAJOR}")
 target_include_directories(SPIRV PUBLIC
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
@@ -80,8 +84,11 @@
 
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
-    set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
-    set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON)
+    set_target_properties(SPVRemapper PROPERTIES
+        FOLDER glslang
+        POSITION_INDEPENDENT_CODE ON
+        VERSION   "${GLSLANG_VERSION}"
+        SOVERSION "${GLSLANG_VERSION_MAJOR}")
 endif()
 
 if(WIN32 AND BUILD_SHARED_LIBS)
@@ -122,7 +129,7 @@
             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\")
+                include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
             endif()
 
             add_library(SPVRemapper ALIAS glslang::SPVRemapper)
@@ -134,7 +141,7 @@
         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\")
+            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
         endif()
 
         add_library(SPIRV ALIAS glslang::SPIRV)
diff --git a/SPIRV/GLSL.ext.ARM.h b/SPIRV/GLSL.ext.ARM.h
new file mode 100644
index 0000000..14425be
--- /dev/null
+++ b/SPIRV/GLSL.ext.ARM.h
@@ -0,0 +1,35 @@
+/*
+** Copyright (c) 2022 ARM Limited
+**
+** 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 GLSLextARM_H
+#define GLSLextARM_H
+
+static const int GLSLextARMVersion = 100;
+static const int GLSLextARMRevision = 1;
+
+static const char * const E_SPV_ARM_core_builtins = "SPV_ARM_core_builtins";
+
+#endif  // #ifndef GLSLextARM_H
diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h
index a247b4c..caab279 100644
--- a/SPIRV/GLSL.ext.EXT.h
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -39,6 +39,7 @@
 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_shader_tile_image = "SPV_EXT_shader_tile_image";
 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 d5c670f..45549c1 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -54,5 +54,6 @@
 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";
+static const char* const E_SPV_KHR_ray_tracing_position_fetch   = "SPV_KHR_ray_tracing_position_fetch";
 
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h
index 93c98bf..5b0f7eb 100644
--- a/SPIRV/GLSL.ext.NV.h
+++ b/SPIRV/GLSL.ext.NV.h
@@ -81,4 +81,7 @@
 //SPV_NV_shader_sm_builtins
 const char* const E_SPV_NV_shader_sm_builtins = "SPV_NV_shader_sm_builtins";
 
+//SPV_NV_shader_execution_reorder
+const char* const E_SPV_NV_shader_invocation_reorder = "SPV_NV_shader_invocation_reorder";
+
 #endif  // #ifndef GLSLextNV_H
diff --git a/SPIRV/GLSL.std.450.h b/SPIRV/GLSL.std.450.h
index df31092..86d3da8 100644
--- a/SPIRV/GLSL.std.450.h
+++ b/SPIRV/GLSL.std.450.h
@@ -13,7 +13,7 @@
 **
 ** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
 ** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ 
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
 **
 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 ** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
old mode 100644
new mode 100755
index 74053c1..9a66363
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -49,6 +49,7 @@
     #include "GLSL.ext.EXT.h"
     #include "GLSL.ext.AMD.h"
     #include "GLSL.ext.NV.h"
+    #include "GLSL.ext.ARM.h"
     #include "NonSemanticDebugPrintf.h"
 }
 
@@ -174,7 +175,7 @@
     spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
                                           glslang::TLayoutPacking, const glslang::TQualifier&);
     void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking,
-                            const glslang::TQualifier&, spv::Id);
+                            const glslang::TQualifier&, spv::Id, const std::vector<spv::Id>& spvMembers);
     spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim);
     spv::Id accessChainLoad(const glslang::TType& type);
     void    accessChainStore(const glslang::TType& type, spv::Id rvalue);
@@ -277,12 +278,10 @@
     // requiring local translation to and from SPIR-V type on every access.
     // Maps <builtin-variable-id -> AST-required-type-id>
     std::unordered_map<spv::Id, spv::Id> forceType;
-
-    // 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;
+    // Used later for generating OpTraceKHR/OpExecuteCallableKHR/OpHitObjectRecordHit*/OpHitObjectGetShaderBindingTableData
+    std::unordered_map<unsigned int, glslang::TIntermSymbol *> locationToSymbol[4];
 };
 
 //
@@ -294,8 +293,6 @@
 {
 #ifdef GLSLANG_WEB
     return spv::SourceLanguageESSL;
-#elif defined(GLSLANG_ANGLE)
-    return spv::SourceLanguageGLSL;
 #endif
 
     switch (source) {
@@ -354,6 +351,7 @@
     case glslang::EsdRect:    return spv::DimRect;
     case glslang::EsdBuffer:  return spv::DimBuffer;
     case glslang::EsdSubpass: return spv::DimSubpassData;
+    case glslang::EsdAttachmentEXT: return spv::DimTileImageDataEXT;
     default:
         assert(0);
         return spv::Dim2D;
@@ -378,26 +376,25 @@
 }
 
 // Translate glslang type to SPIR-V block decorations.
-spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useStorageBuffer)
+spv::Decoration TranslateBlockDecoration(const glslang::TStorageQualifier storage, bool useStorageBuffer)
 {
-    if (type.getBasicType() == glslang::EbtBlock) {
-        switch (type.getQualifier().storage) {
-        case glslang::EvqUniform:      return spv::DecorationBlock;
-        case glslang::EvqBuffer:       return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
-        case glslang::EvqVaryingIn:    return spv::DecorationBlock;
-        case glslang::EvqVaryingOut:   return spv::DecorationBlock;
-        case glslang::EvqShared:       return spv::DecorationBlock;
+    switch (storage) {
+    case glslang::EvqUniform:      return spv::DecorationBlock;
+    case glslang::EvqBuffer:       return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock;
+    case glslang::EvqVaryingIn:    return spv::DecorationBlock;
+    case glslang::EvqVaryingOut:   return spv::DecorationBlock;
+    case glslang::EvqShared:       return spv::DecorationBlock;
 #ifndef GLSLANG_WEB
-        case glslang::EvqPayload:      return spv::DecorationBlock;
-        case glslang::EvqPayloadIn:    return spv::DecorationBlock;
-        case glslang::EvqHitAttr:      return spv::DecorationBlock;
-        case glslang::EvqCallableData:   return spv::DecorationBlock;
-        case glslang::EvqCallableDataIn: return spv::DecorationBlock;
+    case glslang::EvqPayload:      return spv::DecorationBlock;
+    case glslang::EvqPayloadIn:    return spv::DecorationBlock;
+    case glslang::EvqHitAttr:      return spv::DecorationBlock;
+    case glslang::EvqCallableData:   return spv::DecorationBlock;
+    case glslang::EvqCallableDataIn: return spv::DecorationBlock;
+    case glslang::EvqHitObjectAttrNV: return spv::DecorationBlock;
 #endif
-        default:
-            assert(0);
-            break;
-        }
+    default:
+        assert(0);
+        break;
     }
 
     return spv::DecorationMax;
@@ -470,6 +467,7 @@
             case glslang::EvqHitAttr:
             case glslang::EvqCallableData:
             case glslang::EvqCallableDataIn:
+            case glslang::EvqHitObjectAttrNV:
                 return spv::DecorationMax;
 #endif
             default:
@@ -1013,6 +1011,8 @@
         return spv::BuiltInRayTmaxKHR;
     case glslang::EbvCullMask:
         return spv::BuiltInCullMaskKHR;
+    case glslang::EbvPositionFetch:
+        return spv::BuiltInHitTriangleVertexPositionsKHR;
     case glslang::EbvInstanceCustomIndex:
         return spv::BuiltInInstanceCustomIndexKHR;
     case glslang::EbvHitT:
@@ -1108,6 +1108,28 @@
         builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
         builder.addCapability(spv::CapabilityShaderSMBuiltinsNV);
         return spv::BuiltInSMIDNV;
+
+   // ARM builtins
+    case glslang::EbvCoreCountARM:
+        builder.addExtension(spv::E_SPV_ARM_core_builtins);
+        builder.addCapability(spv::CapabilityCoreBuiltinsARM);
+        return spv::BuiltInCoreCountARM;
+    case glslang::EbvCoreIDARM:
+        builder.addExtension(spv::E_SPV_ARM_core_builtins);
+        builder.addCapability(spv::CapabilityCoreBuiltinsARM);
+        return spv::BuiltInCoreIDARM;
+    case glslang::EbvCoreMaxIDARM:
+        builder.addExtension(spv::E_SPV_ARM_core_builtins);
+        builder.addCapability(spv::CapabilityCoreBuiltinsARM);
+        return spv::BuiltInCoreMaxIDARM;
+    case glslang::EbvWarpIDARM:
+        builder.addExtension(spv::E_SPV_ARM_core_builtins);
+        builder.addCapability(spv::CapabilityCoreBuiltinsARM);
+        return spv::BuiltInWarpIDARM;
+    case glslang::EbvWarpMaxIDARM:
+        builder.addExtension(spv::E_SPV_ARM_core_builtins);
+        builder.addCapability(spv::CapabilityCoreBuiltinsARM);
+        return spv::BuiltInWarpMaxIDARM;
 #endif
 
     default:
@@ -1278,7 +1300,7 @@
 // Translate glslang type to SPIR-V storage class.
 spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type)
 {
-    if (type.getBasicType() == glslang::EbtRayQuery)
+    if (type.getBasicType() == glslang::EbtRayQuery || type.getBasicType() == glslang::EbtHitObjectNV)
         return spv::StorageClassPrivate;
 #ifndef GLSLANG_WEB
     if (type.getQualifier().isSpirvByReference()) {
@@ -1290,12 +1312,17 @@
         return spv::StorageClassInput;
     if (type.getQualifier().isPipeOutput())
         return spv::StorageClassOutput;
+    if (type.getQualifier().storage == glslang::EvqTileImageEXT || type.isAttachmentEXT()) {
+        builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+        builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT);
+        return spv::StorageClassTileImageEXT;
+    }
 
     if (glslangIntermediate->getSource() != glslang::EShSourceHlsl ||
             type.getQualifier().storage == glslang::EvqUniform) {
         if (type.isAtomic())
             return spv::StorageClassAtomicCounter;
-        if (type.containsOpaque())
+        if (type.containsOpaque() && !glslangIntermediate->getBindlessMode())
             return spv::StorageClassUniformConstant;
     }
 
@@ -1335,6 +1362,7 @@
     case glslang::EvqCallableData:   return spv::StorageClassCallableDataKHR;
     case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR;
     case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClassTaskPayloadWorkgroupEXT;
+    case glslang::EvqHitObjectAttrNV: return spv::StorageClassHitObjectAttributeNV;
     case glslang::EvqSpirvStorageClass: return static_cast<spv::StorageClass>(type.getQualifier().spirvStorageClass);
 #endif
     default:
@@ -1552,7 +1580,12 @@
     builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()),
                       glslangIntermediate->getVersion());
 
-    if (options.generateDebugInfo) {
+    if (options.emitNonSemanticShaderDebugSource)
+            this->options.emitNonSemanticShaderDebugInfo = true;
+    if (options.emitNonSemanticShaderDebugInfo)
+            this->options.generateDebugInfo = true;
+
+    if (this->options.generateDebugInfo) {
         builder.setEmitOpLines();
         builder.setSourceFile(glslangIntermediate->getSourceFile());
 
@@ -1579,8 +1612,8 @@
             builder.addInclude(iItr->first, iItr->second);
     }
 
-    builder.setEmitNonSemanticShaderDebugInfo(options.emitNonSemanticShaderDebugInfo);
-    builder.setEmitNonSemanticShaderDebugSource(options.emitNonSemanticShaderDebugSource);
+    builder.setEmitNonSemanticShaderDebugInfo(this->options.emitNonSemanticShaderDebugInfo);
+    builder.setEmitNonSemanticShaderDebugSource(this->options.emitNonSemanticShaderDebugSource);
 
     stdBuiltins = builder.import("GLSL.std.450");
 
@@ -1660,6 +1693,24 @@
             builder.addExtension(spv::E_SPV_KHR_post_depth_coverage);
         }
 
+        if (glslangIntermediate->getNonCoherentColorAttachmentReadEXT()) {
+            builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentColorAttachmentReadEXT);
+            builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+        }
+
+        if (glslangIntermediate->getNonCoherentDepthAttachmentReadEXT()) {
+            builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentDepthAttachmentReadEXT);
+            builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+        }
+
+        if (glslangIntermediate->getNonCoherentStencilAttachmentReadEXT()) {
+            builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT);
+            builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentStencilAttachmentReadEXT);
+            builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+        }
+
         if (glslangIntermediate->isDepthReplacing())
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing);
 
@@ -1837,13 +1888,16 @@
             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");
-		}
-	}
+        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");
+            }
+            if (extensions.find("GL_EXT_ray_tracing_position_fetch") != extensions.end()) {
+                builder.addCapability(spv::CapabilityRayTracingPositionFetchKHR);
+                builder.addExtension("SPV_KHR_ray_tracing_position_fetch");
+            }
+        }
         break;
     }
     case EShLangTask:
@@ -1984,6 +2038,10 @@
 //
 void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
 {
+    // We update the line information even though no code might be generated here
+    // This is helpful to yield correct lines for control flow instructions
+    builder.setLine(symbol->getLoc().line, symbol->getLoc().getFilename());
+
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
     if (symbol->getType().isStruct())
         glslangTypeToIdMap[symbol->getType().getStruct()] = symbol->getId();
@@ -2135,6 +2193,9 @@
             node->getRight()->traverse(this);
             spv::Id rValue = accessChainLoad(node->getRight()->getType());
 
+            // reset line number for assignment
+            builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+
             if (node->getOp() != glslang::EOpAssign) {
                 // the left is also an r-value
                 builder.setAccessChain(lValue);
@@ -2561,6 +2622,35 @@
 
     spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags;
 
+    const auto hitObjectOpsWithLvalue = [](glslang::TOperator op) {
+        switch(op) {
+            case glslang::EOpReorderThreadNV:
+            case glslang::EOpHitObjectGetCurrentTimeNV:
+            case glslang::EOpHitObjectGetHitKindNV:
+            case glslang::EOpHitObjectGetPrimitiveIndexNV:
+            case glslang::EOpHitObjectGetGeometryIndexNV:
+            case glslang::EOpHitObjectGetInstanceIdNV:
+            case glslang::EOpHitObjectGetInstanceCustomIndexNV:
+            case glslang::EOpHitObjectGetObjectRayDirectionNV:
+            case glslang::EOpHitObjectGetObjectRayOriginNV:
+            case glslang::EOpHitObjectGetWorldRayDirectionNV:
+            case glslang::EOpHitObjectGetWorldRayOriginNV:
+            case glslang::EOpHitObjectGetWorldToObjectNV:
+            case glslang::EOpHitObjectGetObjectToWorldNV:
+            case glslang::EOpHitObjectGetRayTMaxNV:
+            case glslang::EOpHitObjectGetRayTMinNV:
+            case glslang::EOpHitObjectIsEmptyNV:
+            case glslang::EOpHitObjectIsHitNV:
+            case glslang::EOpHitObjectIsMissNV:
+            case glslang::EOpHitObjectRecordEmptyNV:
+            case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV:
+            case glslang::EOpHitObjectGetShaderRecordBufferHandleNV:
+                return true;
+            default:
+                return false;
+        }
+    };
+
 #ifndef GLSLANG_WEB
     if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
         node->getOp() == glslang::EOpAtomicCounterDecrement ||
@@ -2575,7 +2665,8 @@
         node->getOp() == glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque ||
         node->getOp() == glslang::EOpRayQueryTerminate ||
         node->getOp() == glslang::EOpRayQueryConfirmIntersection ||
-        (node->getOp() == glslang::EOpSpirvInst && operandNode->getAsTyped()->getQualifier().isSpirvByReference())) {
+        (node->getOp() == glslang::EOpSpirvInst && operandNode->getAsTyped()->getQualifier().isSpirvByReference()) ||
+        hitObjectOpsWithLvalue(node->getOp())) {
         operand = builder.accessChainGetLValue(); // Special case l-value operands
         lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
         lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType());
@@ -2710,6 +2801,12 @@
     case glslang::EOpRayQueryConfirmIntersection:
         builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operand);
         return false;
+    case glslang::EOpReorderThreadNV:
+        builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operand);
+        return false;
+    case glslang::EOpHitObjectRecordEmptyNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordEmptyNV, operand);
+        return false;
 #endif
 
     default:
@@ -3201,6 +3298,48 @@
         builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock);
         noReturnValue = true;
         break;
+
+    case glslang::EOpHitObjectTraceRayNV:
+    case glslang::EOpHitObjectTraceRayMotionNV:
+    case glslang::EOpHitObjectGetAttributesNV:
+    case glslang::EOpHitObjectExecuteShaderNV:
+    case glslang::EOpHitObjectRecordEmptyNV:
+    case glslang::EOpHitObjectRecordMissNV:
+    case glslang::EOpHitObjectRecordMissMotionNV:
+    case glslang::EOpHitObjectRecordHitNV:
+    case glslang::EOpHitObjectRecordHitMotionNV:
+    case glslang::EOpHitObjectRecordHitWithIndexNV:
+    case glslang::EOpHitObjectRecordHitWithIndexMotionNV:
+    case glslang::EOpReorderThreadNV:
+        noReturnValue = true;
+        //Fallthrough
+    case glslang::EOpHitObjectIsEmptyNV:
+    case glslang::EOpHitObjectIsMissNV:
+    case glslang::EOpHitObjectIsHitNV:
+    case glslang::EOpHitObjectGetRayTMinNV:
+    case glslang::EOpHitObjectGetRayTMaxNV:
+    case glslang::EOpHitObjectGetObjectRayOriginNV:
+    case glslang::EOpHitObjectGetObjectRayDirectionNV:
+    case glslang::EOpHitObjectGetWorldRayOriginNV:
+    case glslang::EOpHitObjectGetWorldRayDirectionNV:
+    case glslang::EOpHitObjectGetObjectToWorldNV:
+    case glslang::EOpHitObjectGetWorldToObjectNV:
+    case glslang::EOpHitObjectGetInstanceCustomIndexNV:
+    case glslang::EOpHitObjectGetInstanceIdNV:
+    case glslang::EOpHitObjectGetGeometryIndexNV:
+    case glslang::EOpHitObjectGetPrimitiveIndexNV:
+    case glslang::EOpHitObjectGetHitKindNV:
+    case glslang::EOpHitObjectGetCurrentTimeNV:
+    case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV:
+    case glslang::EOpHitObjectGetShaderRecordBufferHandleNV:
+        builder.addExtension(spv::E_SPV_NV_shader_invocation_reorder);
+        builder.addCapability(spv::CapabilityShaderInvocationReorderNV);
+        break;
+    case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:
+        builder.addExtension(spv::E_SPV_KHR_ray_tracing_position_fetch);
+        builder.addCapability(spv::CapabilityRayQueryPositionFetchKHR);
+        noReturnValue = true;
+        break;
 #endif
 
     case glslang::EOpDebugPrintf:
@@ -3258,6 +3397,22 @@
                 lvalue = true;
             break;
 
+
+
+        case glslang::EOpHitObjectRecordHitNV:
+        case glslang::EOpHitObjectRecordHitMotionNV:
+        case glslang::EOpHitObjectRecordHitWithIndexNV:
+        case glslang::EOpHitObjectRecordHitWithIndexMotionNV:
+        case glslang::EOpHitObjectTraceRayNV:
+        case glslang::EOpHitObjectTraceRayMotionNV:
+        case glslang::EOpHitObjectExecuteShaderNV:
+        case glslang::EOpHitObjectRecordMissNV:
+        case glslang::EOpHitObjectRecordMissMotionNV:
+        case glslang::EOpHitObjectGetAttributesNV:
+            if (arg == 0)
+                lvalue = true;
+            break;
+
         case glslang::EOpRayQueryInitialize:
         case glslang::EOpRayQueryTerminate:
         case glslang::EOpRayQueryConfirmIntersection:
@@ -3358,6 +3513,15 @@
             if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvByReference())
                 lvalue = true;
             break;
+        case glslang::EOpReorderThreadNV:
+            //Three variants of reorderThreadNV, two of them use hitObjectNV
+            if (arg == 0 && glslangOperands.size() != 2)
+                lvalue = true;
+            break;
+        case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:
+            if (arg == 0 || arg == 2)
+                lvalue = true;
+            break;
 #endif
         default:
             break;
@@ -3450,17 +3614,30 @@
                  glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayDirection ||
                  glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayOrigin ||
                  glslangOp == glslang::EOpRayQueryGetIntersectionObjectToWorld ||
-                 glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject
+                 glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject ||
+                 glslangOp == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT
                     )) {
                 bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
                 operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
              } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) ||
                         (arg == 11 && glslangOp == glslang::EOpTraceRayMotionNV) ||
-                        (arg == 1  && glslangOp == glslang::EOpExecuteCallableKHR)) {
-                 const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : (glslangOp == glslang::EOpTraceRayMotionNV ? 11 : 1);
+                        (arg == 1  && glslangOp == glslang::EOpExecuteCallableKHR) ||
+                        (arg == 1  && glslangOp == glslang::EOpHitObjectExecuteShaderNV) ||
+                        (arg == 11 && glslangOp == glslang::EOpHitObjectTraceRayNV) ||
+                        (arg == 12 && glslangOp == glslang::EOpHitObjectTraceRayMotionNV)) {
                  const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0;
-
-                 const int location = glslangOperands[opdNum]->getAsConstantUnion()->getConstArray()[0].getUConst();
+                 const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst();
+                 auto itNode = locationToSymbol[set].find(location);
+                 visitSymbol(itNode->second);
+                 spv::Id symId = getSymbolId(itNode->second);
+                 operands.push_back(symId);
+            } else if ((arg == 12 && glslangOp == glslang::EOpHitObjectRecordHitNV) ||
+                       (arg == 13 && glslangOp == glslang::EOpHitObjectRecordHitMotionNV) ||
+                       (arg == 11 && glslangOp == glslang::EOpHitObjectRecordHitWithIndexNV) ||
+                       (arg == 12 && glslangOp == glslang::EOpHitObjectRecordHitWithIndexMotionNV) ||
+                       (arg == 1  && glslangOp == glslang::EOpHitObjectGetAttributesNV)) {
+                 const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst();
+                 const int set = 2;
                  auto itNode = locationToSymbol[set].find(location);
                  visitSymbol(itNode->second);
                  spv::Id symId = getSymbolId(itNode->second);
@@ -3504,6 +3681,19 @@
 
         builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps);
         result = 0;
+    } else if (node->getOp() == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT) {
+        std::vector<spv::IdImmediate> idImmOps;
+
+        idImmOps.push_back(spv::IdImmediate(true, operands[0])); // q
+        idImmOps.push_back(spv::IdImmediate(true, operands[1])); // committed
+
+        spv::Id typeId = builder.makeArrayType(builder.makeVectorType(builder.makeFloatType(32), 3),
+                                               builder.makeUintConstant(3), 0);
+        // do the op
+        spv::Id result = builder.createOp(spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR, typeId, idImmOps);
+        // store the result to the pointer (out param 'm')
+        builder.createStore(result, operands[2]);
+        result = 0;
     } else
 #endif
     if (atomic) {
@@ -3656,10 +3846,11 @@
     // Find a way of executing both sides and selecting the right result.
     const auto executeBothSides = [&]() -> void {
         // execute both sides
+        spv::Id resultType = convertGlslangToSpvType(node->getType());
         node->getTrueBlock()->traverse(this);
         spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
         node->getFalseBlock()->traverse(this);
-        spv::Id falseValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
+        spv::Id falseValue = accessChainLoad(node->getFalseBlock()->getAsTyped()->getType());
 
         builder.setLine(node->getLoc().line, node->getLoc().getFilename());
 
@@ -3668,8 +3859,8 @@
             return;
 
         // emit code to select between trueValue and falseValue
-
-        // see if OpSelect can handle it
+        // see if OpSelect can handle the result type, and that the SPIR-V types
+        // of the inputs match the result type.
         if (isOpSelectable()) {
             // Emit OpSelect for this selection.
 
@@ -3681,10 +3872,18 @@
                                                                        builder.getNumComponents(trueValue)));
             }
 
+            // If the types do not match, it is because of mismatched decorations on aggregates.
+            // Since isOpSelectable only lets us get here for SPIR-V >= 1.4, we can use OpCopyObject
+            // to get matching types.
+            if (builder.getTypeId(trueValue) != resultType) {
+                trueValue = builder.createUnaryOp(spv::OpCopyLogical, resultType, trueValue);
+            }
+            if (builder.getTypeId(falseValue) != resultType) {
+                falseValue = builder.createUnaryOp(spv::OpCopyLogical, resultType, falseValue);
+            }
+
             // OpSelect
-            result = builder.createTriOp(spv::OpSelect,
-                                         convertGlslangToSpvType(node->getType()), condition,
-                                                                 trueValue, falseValue);
+            result = builder.createTriOp(spv::OpSelect, resultType, condition, trueValue, falseValue);
 
             builder.clearAccessChain();
             builder.setAccessChainRValue(result);
@@ -3692,7 +3891,7 @@
             // We need control flow to select the result.
             // TODO: Once SPIR-V OpSelect allows arbitrary types, eliminate this path.
             result = builder.createVariable(TranslatePrecisionDecoration(node->getType()),
-                spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
+                spv::StorageClassFunction, resultType);
 
             // Selection control:
             const spv::SelectionControlMask control = TranslateSelectionControl(*node);
@@ -3701,10 +3900,15 @@
             spv::Builder::If ifBuilder(condition, control, builder);
 
             // emit the "then" statement
-            builder.createStore(trueValue, result);
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(result);
+            multiTypeStore(node->getType(), trueValue);
+
             ifBuilder.makeBeginElse();
             // emit the "else" statement
-            builder.createStore(falseValue, result);
+            builder.clearAccessChain();
+            builder.setAccessChainLValue(result);
+            multiTypeStore(node->getType(), falseValue);
 
             // finish off the control flow
             ifBuilder.makeEndIf();
@@ -3731,16 +3935,26 @@
         // emit the "then" statement
         if (node->getTrueBlock() != nullptr) {
             node->getTrueBlock()->traverse(this);
-            if (result != spv::NoResult)
-                builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
+            if (result != spv::NoResult) {
+                spv::Id load = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
+
+                builder.clearAccessChain();
+                builder.setAccessChainLValue(result);
+                multiTypeStore(node->getType(), load);
+            }
         }
 
         if (node->getFalseBlock() != nullptr) {
             ifBuilder.makeBeginElse();
             // emit the "else" statement
             node->getFalseBlock()->traverse(this);
-            if (result != spv::NoResult)
-                builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
+            if (result != spv::NoResult) {
+                spv::Id load = accessChainLoad(node->getFalseBlock()->getAsTyped()->getType());
+
+                builder.clearAccessChain();
+                builder.setAccessChainLValue(result);
+                multiTypeStore(node->getType(), load);
+            }
         }
 
         // finish off the control flow
@@ -4286,6 +4500,13 @@
     case glslang::EbtString:
         // no type used for OpString
         return 0;
+
+    case glslang::EbtHitObjectNV: {
+        builder.addExtension(spv::E_SPV_NV_shader_invocation_reorder);
+        builder.addCapability(spv::CapabilityShaderInvocationReorderNV);
+        spvType = builder.makeHitObjectNVType();
+    }
+    break;
 #ifndef GLSLANG_WEB
     case glslang::EbtSpirvType: {
         // GL_EXT_spirv_intrinsics
@@ -4294,50 +4515,56 @@
 
         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;
-                    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({false, literal});
-                } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
-                    unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
-                    operands.push_back({false, literal});
-                } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
-                    unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
-                    operands.push_back({false, literal});
-                } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
-                    auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
-                    unsigned literal = 0;
-                    char* literalPtr = reinterpret_cast<char*>(&literal);
-                    unsigned charCount = 0;
-                    char ch = 0;
-                    do {
-                        ch = *(str++);
-                        *(literalPtr++) = ch;
-                        ++charCount;
-                        if (charCount == 4) {
-                            operands.push_back({false, literal});
-                            literalPtr = reinterpret_cast<char*>(&literal);
-                            charCount = 0;
-                        }
-                    } while (ch != 0);
-
-                    // Partial literal is padded with 0
-                    if (charCount > 0) {
-                        for (; charCount < 4; ++charCount)
-                            *(literalPtr++) = 0;
+            if (typeParam.constant != nullptr) {
+                // Constant expression
+                if (typeParam.constant->isLiteral()) {
+                    if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
+                        float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
+                        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({false, literal});
+                    } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
+                        unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
+                        operands.push_back({false, literal});
+                    } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
+                        unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
+                        operands.push_back({false, literal});
+                    } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
+                        auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
+                        unsigned literal = 0;
+                        char* literalPtr = reinterpret_cast<char*>(&literal);
+                        unsigned charCount = 0;
+                        char ch = 0;
+                        do {
+                            ch = *(str++);
+                            *(literalPtr++) = ch;
+                            ++charCount;
+                            if (charCount == 4) {
+                                operands.push_back({false, literal});
+                                literalPtr = reinterpret_cast<char*>(&literal);
+                                charCount = 0;
+                            }
+                        } while (ch != 0);
+
+                        // Partial literal is padded with 0
+                        if (charCount > 0) {
+                            for (; charCount < 4; ++charCount)
+                                *(literalPtr++) = 0;
+                            operands.push_back({false, literal});
+                        }
+                    } else
+                        assert(0); // Unexpected type
                 } else
-                    assert(0); // Unexpected type
-            } else
-                operands.push_back({true, createSpvConstant(*typeParam.constant)});
+                    operands.push_back({true, createSpvConstant(*typeParam.constant)});
+            } else {
+                // Type specifier
+                assert(typeParam.type != nullptr);
+                operands.push_back({true, convertGlslangToSpvType(*typeParam.type)});
+            }
         }
 
         assert(spirvInst.set == ""); // Currently, couldn't be extended instructions.
@@ -4537,7 +4764,7 @@
         structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers] = spvType;
 
     // Decorate it
-    decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType);
+    decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType, spvMembers);
 
     for (int i = 0; i < (int)deferredForwardPointers.size(); ++i) {
         auto it = deferredForwardPointers[i];
@@ -4551,7 +4778,8 @@
                                                 const glslang::TTypeList* glslangMembers,
                                                 glslang::TLayoutPacking explicitLayout,
                                                 const glslang::TQualifier& qualifier,
-                                                spv::Id spvType)
+                                                spv::Id spvType,
+                                                const std::vector<spv::Id>& spvMembers)
 {
     // Name and decorate the non-hidden members
     int offset = -1;
@@ -4704,7 +4932,19 @@
 
     // Decorate the structure
     builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
-    builder.addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
+    const auto basicType = type.getBasicType();
+    const auto typeStorageQualifier = type.getQualifier().storage;
+    if (basicType == glslang::EbtBlock) {
+        builder.addDecoration(spvType, TranslateBlockDecoration(typeStorageQualifier, glslangIntermediate->usingStorageBuffer()));
+    } else if (basicType == glslang::EbtStruct && glslangIntermediate->getSpv().vulkan > 0) {
+        const auto hasRuntimeArray = !spvMembers.empty() && builder.getOpCode(spvMembers.back()) == spv::OpTypeRuntimeArray;
+        if (hasRuntimeArray) {
+            builder.addDecoration(spvType, TranslateBlockDecoration(typeStorageQualifier, glslangIntermediate->usingStorageBuffer()));
+        }
+    }
+
+    if (qualifier.hasHitObjectShaderRecordNV())
+        builder.addDecoration(spvType, spv::DecorationHitObjectShaderRecordBufferNV);
 }
 
 // Turn the expression forming the array size into an id.
@@ -5085,7 +5325,7 @@
         return true;
     if (glslangIntermediate->getSource() == glslang::EShSourceHlsl)
         return paramType.getBasicType() == glslang::EbtBlock;
-    return paramType.containsOpaque() ||                                                       // sampler, etc.
+    return (paramType.containsOpaque() && !glslangIntermediate->getBindlessMode()) ||       // sampler, etc.
 #ifndef GLSLANG_WEB
            paramType.getQualifier().isSpirvByReference() ||                                    // spirv_by_reference
 #endif
@@ -5232,6 +5472,10 @@
                     set = 1;
                     break;
 
+                case glslang::EvqHitObjectAttrNV:
+                    set = 2;
+                    break;
+
                 default:
                     set = -1;
                 }
@@ -5380,6 +5624,10 @@
             if (i == 7)
                 lvalue = true;
             break;
+        case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:
+            if (i == 2)
+                lvalue = true;
+            break;
         default:
             break;
         }
@@ -5539,6 +5787,17 @@
             return result;
         }
 
+        if (cracked.attachmentEXT) {
+            if (opIt != arguments.end()) {
+                spv::IdImmediate sample = { true, *opIt };
+                operands.push_back(sample);
+            }
+            spv::Id result = builder.createOp(spv::OpColorAttachmentReadEXT, resultType(), operands);
+            builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+            builder.setPrecision(result, precision);
+            return result;
+        }
+
         spv::IdImmediate coord = { true, *(opIt++) };
         operands.push_back(coord);
         if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) {
@@ -6876,12 +7135,102 @@
     case glslang::EOpConvUvec2ToAccStruct:
         unaryOp = spv::OpConvertUToAccelerationStructureKHR;
         break;
+
+    case glslang::EOpHitObjectIsEmptyNV:
+        unaryOp = spv::OpHitObjectIsEmptyNV;
+        break;
+
+    case glslang::EOpHitObjectIsMissNV:
+        unaryOp = spv::OpHitObjectIsMissNV;
+        break;
+
+    case glslang::EOpHitObjectIsHitNV:
+        unaryOp = spv::OpHitObjectIsHitNV;
+        break;
+
+    case glslang::EOpHitObjectGetObjectRayOriginNV:
+        unaryOp = spv::OpHitObjectGetObjectRayOriginNV;
+        break;
+
+    case glslang::EOpHitObjectGetObjectRayDirectionNV:
+        unaryOp = spv::OpHitObjectGetObjectRayDirectionNV;
+        break;
+
+    case glslang::EOpHitObjectGetWorldRayOriginNV:
+        unaryOp = spv::OpHitObjectGetWorldRayOriginNV;
+        break;
+
+    case glslang::EOpHitObjectGetWorldRayDirectionNV:
+        unaryOp = spv::OpHitObjectGetWorldRayDirectionNV;
+        break;
+
+    case glslang::EOpHitObjectGetObjectToWorldNV:
+        unaryOp = spv::OpHitObjectGetObjectToWorldNV;
+        break;
+
+    case glslang::EOpHitObjectGetWorldToObjectNV:
+        unaryOp = spv::OpHitObjectGetWorldToObjectNV;
+        break;
+
+    case glslang::EOpHitObjectGetRayTMinNV:
+        unaryOp = spv::OpHitObjectGetRayTMinNV;
+        break;
+
+    case glslang::EOpHitObjectGetRayTMaxNV:
+        unaryOp = spv::OpHitObjectGetRayTMaxNV;
+        break;
+
+    case glslang::EOpHitObjectGetPrimitiveIndexNV:
+        unaryOp = spv::OpHitObjectGetPrimitiveIndexNV;
+        break;
+
+    case glslang::EOpHitObjectGetInstanceIdNV:
+        unaryOp = spv::OpHitObjectGetInstanceIdNV;
+        break;
+
+    case glslang::EOpHitObjectGetInstanceCustomIndexNV:
+        unaryOp = spv::OpHitObjectGetInstanceCustomIndexNV;
+        break;
+
+    case glslang::EOpHitObjectGetGeometryIndexNV:
+        unaryOp = spv::OpHitObjectGetGeometryIndexNV;
+        break;
+
+    case glslang::EOpHitObjectGetHitKindNV:
+        unaryOp = spv::OpHitObjectGetHitKindNV;
+        break;
+
+    case glslang::EOpHitObjectGetCurrentTimeNV:
+        unaryOp = spv::OpHitObjectGetCurrentTimeNV;
+        break;
+
+    case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV:
+        unaryOp = spv::OpHitObjectGetShaderBindingTableRecordIndexNV;
+        break;
+
+    case glslang::EOpHitObjectGetShaderRecordBufferHandleNV:
+        unaryOp = spv::OpHitObjectGetShaderRecordBufferHandleNV;
+        break;
+
 #endif
 
     case glslang::EOpCopyObject:
         unaryOp = spv::OpCopyObject;
         break;
 
+    case glslang::EOpDepthAttachmentReadEXT:
+        builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+        builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT);
+        unaryOp = spv::OpDepthAttachmentReadEXT;
+        decorations.precision = spv::NoPrecision;
+        break;
+    case glslang::EOpStencilAttachmentReadEXT:
+        builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+        builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT);
+        unaryOp = spv::OpStencilAttachmentReadEXT;
+        decorations.precision = spv::DecorationRelaxedPrecision;
+        break;
+
     default:
         return 0;
     }
@@ -8617,6 +8966,122 @@
     case glslang::EOpCooperativeMatrixMulAdd:
         opCode = spv::OpCooperativeMatrixMulAddNV;
         break;
+    case glslang::EOpHitObjectTraceRayNV:
+        builder.createNoResultOp(spv::OpHitObjectTraceRayNV, operands);
+        return 0;
+    case glslang::EOpHitObjectTraceRayMotionNV:
+        builder.createNoResultOp(spv::OpHitObjectTraceRayMotionNV, operands);
+        return 0;
+    case glslang::EOpHitObjectRecordHitNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordHitNV, operands);
+        return 0;
+    case glslang::EOpHitObjectRecordHitMotionNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordHitMotionNV, operands);
+        return 0;
+    case glslang::EOpHitObjectRecordHitWithIndexNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordHitWithIndexNV, operands);
+        return 0;
+    case glslang::EOpHitObjectRecordHitWithIndexMotionNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordHitWithIndexMotionNV, operands);
+        return 0;
+    case glslang::EOpHitObjectRecordMissNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordMissNV, operands);
+        return 0;
+    case glslang::EOpHitObjectRecordMissMotionNV:
+        builder.createNoResultOp(spv::OpHitObjectRecordMissMotionNV, operands);
+        return 0;
+    case glslang::EOpHitObjectExecuteShaderNV:
+        builder.createNoResultOp(spv::OpHitObjectExecuteShaderNV, operands);
+        return 0;
+    case glslang::EOpHitObjectIsEmptyNV:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpHitObjectIsEmptyNV;
+        break;
+    case glslang::EOpHitObjectIsMissNV:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpHitObjectIsMissNV;
+        break;
+    case glslang::EOpHitObjectIsHitNV:
+        typeId = builder.makeBoolType();
+        opCode = spv::OpHitObjectIsHitNV;
+        break;
+    case glslang::EOpHitObjectGetRayTMinNV:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpHitObjectGetRayTMinNV;
+        break;
+    case glslang::EOpHitObjectGetRayTMaxNV:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpHitObjectGetRayTMaxNV;
+        break;
+    case glslang::EOpHitObjectGetObjectRayOriginNV:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpHitObjectGetObjectRayOriginNV;
+        break;
+    case glslang::EOpHitObjectGetObjectRayDirectionNV:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpHitObjectGetObjectRayDirectionNV;
+        break;
+    case glslang::EOpHitObjectGetWorldRayOriginNV:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpHitObjectGetWorldRayOriginNV;
+        break;
+    case glslang::EOpHitObjectGetWorldRayDirectionNV:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 3);
+        opCode = spv::OpHitObjectGetWorldRayDirectionNV;
+        break;
+    case glslang::EOpHitObjectGetWorldToObjectNV:
+        typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+        opCode = spv::OpHitObjectGetWorldToObjectNV;
+        break;
+    case glslang::EOpHitObjectGetObjectToWorldNV:
+        typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
+        opCode = spv::OpHitObjectGetObjectToWorldNV;
+        break;
+    case glslang::EOpHitObjectGetInstanceCustomIndexNV:
+        typeId = builder.makeIntegerType(32, 1);
+        opCode = spv::OpHitObjectGetInstanceCustomIndexNV;
+        break;
+    case glslang::EOpHitObjectGetInstanceIdNV:
+        typeId = builder.makeIntegerType(32, 1);
+        opCode = spv::OpHitObjectGetInstanceIdNV;
+        break;
+    case glslang::EOpHitObjectGetGeometryIndexNV:
+        typeId = builder.makeIntegerType(32, 1);
+        opCode = spv::OpHitObjectGetGeometryIndexNV;
+        break;
+    case glslang::EOpHitObjectGetPrimitiveIndexNV:
+        typeId = builder.makeIntegerType(32, 1);
+        opCode = spv::OpHitObjectGetPrimitiveIndexNV;
+        break;
+    case glslang::EOpHitObjectGetHitKindNV:
+        typeId = builder.makeIntegerType(32, 0);
+        opCode = spv::OpHitObjectGetHitKindNV;
+        break;
+    case glslang::EOpHitObjectGetCurrentTimeNV:
+        typeId = builder.makeFloatType(32);
+        opCode = spv::OpHitObjectGetCurrentTimeNV;
+        break;
+    case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV:
+        typeId = builder.makeIntegerType(32, 0);
+        opCode = spv::OpHitObjectGetShaderBindingTableRecordIndexNV;
+        return 0;
+    case glslang::EOpHitObjectGetAttributesNV:
+        builder.createNoResultOp(spv::OpHitObjectGetAttributesNV, operands);
+        return 0;
+    case glslang::EOpHitObjectGetShaderRecordBufferHandleNV:
+        typeId = builder.makeVectorType(builder.makeUintType(32), 2);
+        opCode = spv::OpHitObjectGetShaderRecordBufferHandleNV;
+        break;
+    case glslang::EOpReorderThreadNV: {
+        if (operands.size() == 2) {
+            builder.createNoResultOp(spv::OpReorderThreadWithHintNV, operands);
+        } else {
+            builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operands);
+        }
+        return 0;
+
+    }
+        break;
 #endif // GLSLANG_WEB
     default:
         return 0;
@@ -8856,6 +9321,30 @@
         return builder.createOp(spv::OpReadClockKHR, typeId, args);
     }
 #endif
+    case glslang::EOpStencilAttachmentReadEXT:
+    case glslang::EOpDepthAttachmentReadEXT:
+    {
+        builder.addExtension(spv::E_SPV_EXT_shader_tile_image);
+
+        spv::Decoration precision;
+        spv::Op spv_op;
+        if (op == glslang::EOpStencilAttachmentReadEXT)
+        {
+            precision = spv::DecorationRelaxedPrecision;
+            spv_op = spv::OpStencilAttachmentReadEXT;
+            builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT);
+        }
+        else
+        {
+            precision = spv::NoPrecision;
+            spv_op = spv::OpDepthAttachmentReadEXT;
+            builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT);
+        }
+
+        std::vector<spv::Id> args; // Dummy args
+        spv::Id result = builder.createOp(spv_op, typeId, args);
+        return builder.setPrecision(result, precision);
+    }
     default:
         break;
     }
@@ -8926,13 +9415,17 @@
     }
 
     if (symbol->getQualifier().hasLocation()) {
-        if (!(glslangIntermediate->isRayTracingStage() && glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing)
+        if (!(glslangIntermediate->isRayTracingStage() &&
+              (glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing) ||
+               glslangIntermediate->IsRequestedExtension(glslang::E_GL_NV_shader_invocation_reorder))
               && (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.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR ||
+                  builder.getStorageClass(id) == spv::StorageClassHitObjectAttributeNV))) {
+            // Location values are used to link TraceRayKHR/ExecuteCallableKHR/HitObjectGetAttributesNV
+            // 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);
         }
     }
@@ -9071,10 +9564,10 @@
             std::vector<spv::Id> operandIds;
             assert(!decorateId.second.empty());
             for (auto extraOperand : decorateId.second) {
-                if (extraOperand->getQualifier().isSpecConstant())
-                    operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
-                else
+                if (extraOperand->getQualifier().isFrontEndConstant())
                     operandIds.push_back(createSpvConstant(*extraOperand));
+                else
+                    operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
             }
             builder.addDecorationId(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
         }
@@ -9554,27 +10047,32 @@
 }
 
 // Write SPIR-V out to a binary file
-void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
+bool OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName)
 {
     std::ofstream out;
     out.open(baseName, std::ios::binary | std::ios::out);
-    if (out.fail())
+    if (out.fail()) {
         printf("ERROR: Failed to open file: %s\n", baseName);
+        return false;
+    }
     for (int i = 0; i < (int)spirv.size(); ++i) {
         unsigned int word = spirv[i];
         out.write((const char*)&word, 4);
     }
     out.close();
+    return true;
 }
 
 // Write SPIR-V out to a text file with 32-bit hexadecimal words
-void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
+bool OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     std::ofstream out;
     out.open(baseName, std::ios::binary | std::ios::out);
-    if (out.fail())
+    if (out.fail()) {
         printf("ERROR: Failed to open file: %s\n", baseName);
+        return false;
+    }
     out << "\t// " <<
         GetSpirvGeneratorVersion() <<
         GLSLANG_VERSION_MAJOR << "." << GLSLANG_VERSION_MINOR << "." << GLSLANG_VERSION_PATCH <<
@@ -9601,6 +10099,7 @@
     }
     out.close();
 #endif
+    return true;
 }
 
 //
@@ -9617,7 +10116,7 @@
 {
     TIntermNode* root = intermediate.getTreeRoot();
 
-    if (root == 0)
+    if (root == nullptr)
         return;
 
     SpvOptions defaultOptions;
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index 3907be4..b9736d7 100644
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -55,7 +55,7 @@
                   SpvOptions* options = nullptr);
 void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
                   spv::SpvBuildLogger* logger, SpvOptions* options = nullptr);
-void OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
-void OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
+bool OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
+bool OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
 
 }
diff --git a/SPIRV/NonSemanticDebugPrintf.h b/SPIRV/NonSemanticDebugPrintf.h
index 83796d7..3ca7247 100644
--- a/SPIRV/NonSemanticDebugPrintf.h
+++ b/SPIRV/NonSemanticDebugPrintf.h
@@ -1,5 +1,5 @@
 // Copyright (c) 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
@@ -7,15 +7,15 @@
 // 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.
@@ -23,7 +23,7 @@
 // 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_NonSemanticDebugPrintf_H_
 #define SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_
diff --git a/SPIRV/NonSemanticShaderDebugInfo100.h b/SPIRV/NonSemanticShaderDebugInfo100.h
index c52f32f..f74abcb 100644
--- a/SPIRV/NonSemanticShaderDebugInfo100.h
+++ b/SPIRV/NonSemanticShaderDebugInfo100.h
@@ -1,19 +1,19 @@
 // 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/ 
-// 
+// 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
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index 6aca8cb..4b2c439 100644
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -36,10 +36,6 @@
 #include "SPVRemapper.h"
 #include "doc.h"
 
-#if !defined (use_cpp11)
-// ... not supported before C++11
-#else // defined (use_cpp11)
-
 #include <algorithm>
 #include <cassert>
 #include "../glslang/Include/Common.h"
@@ -1528,5 +1524,3 @@
 
 } // namespace SPV
 
-#endif // defined (use_cpp11)
-
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index d216946..42b0168 100644
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -43,12 +43,6 @@
 
 namespace spv {
 
-// MSVC defines __cplusplus as an older value, even when it supports almost all of 11.
-// We handle that here by making our own symbol.
-#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1700)
-#   define use_cpp11 1
-#endif
-
 class spirvbin_base_t
 {
 public:
@@ -74,27 +68,6 @@
 
 } // namespace SPV
 
-#if !defined (use_cpp11)
-#include <cstdio>
-#include <cstdint>
-
-namespace spv {
-class spirvbin_t : public spirvbin_base_t
-{
-public:
-    spirvbin_t(int /*verbose = 0*/) { }
-
-    void remap(std::vector<std::uint32_t>& /*spv*/, unsigned int /*opts = 0*/)
-    {
-        printf("Tool not compiled for C++11, which is required for SPIR-V remapping.\n");
-        exit(5);
-    }
-};
-
-} // namespace SPV
-
-#else // defined (use_cpp11)
-
 #include <functional>
 #include <cstdint>
 #include <unordered_map>
@@ -308,5 +281,4 @@
 
 } // namespace SPV
 
-#endif // defined (use_cpp11)
 #endif // SPIRVREMAPPER_H
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 7c5ea87..df5f234 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -71,9 +71,9 @@
     addressModel(AddressingModelLogical),
     memoryModel(MemoryModelGLSL450),
     builderNumber(magicNumber),
-    buildPoint(0),
+    buildPoint(nullptr),
     uniqueId(0),
-    entryPointFunction(0),
+    entryPointFunction(nullptr),
     generatingOpCodeForSpecConst(false),
     logger(buildLogger)
 {
@@ -144,6 +144,7 @@
 
 void Builder::addDebugScopeAndLine(Id fileName, int lineNum, int column)
 {
+    assert(!currentDebugScopeId.empty());
     if (currentDebugScopeId.top() != lastDebugScopeId) {
         spv::Id resultId = getUniqueId();
         Instruction* scopeInst = new Instruction(resultId, makeVoidType(), OpExtInst);
@@ -650,8 +651,12 @@
     type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic));
     type->addIdOperand(debugId[returnType]);
     for (auto const paramType : paramTypes) {
-        assert(isPointerType(paramType) || isArrayType(paramType));
-        type->addIdOperand(debugId[getContainedTypeId(paramType)]);
+        if (isPointerType(paramType) || isArrayType(paramType)) {
+            type->addIdOperand(debugId[getContainedTypeId(paramType)]);
+        }
+        else {
+            type->addIdOperand(debugId[paramType]);
+        }
     }
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
@@ -1067,6 +1072,12 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(sourceInst));
     module.mapInstruction(sourceInst);
     nonSemanticShaderCompilationUnitId = resultId;
+
+    // We can reasonably assume that makeDebugCompilationUnit will be called before any of
+    // debug-scope stack. Function scopes and lexical scopes will occur afterward.
+    assert(currentDebugScopeId.empty());
+    currentDebugScopeId.push(nonSemanticShaderCompilationUnitId);
+
     return resultId;
 }
 
@@ -1096,6 +1107,8 @@
 Id Builder::createDebugLocalVariable(Id type, char const*const name, size_t const argNumber)
 {
     assert(name != nullptr);
+    assert(!currentDebugScopeId.empty());
+
     Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
     inst->addIdOperand(nonSemanticShaderDebugInfo);
     inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLocalVariable);
@@ -1176,6 +1189,21 @@
 
     return type->getResultId();
 }
+
+Id Builder::makeHitObjectNVType()
+{
+    Instruction *type;
+    if (groupedTypes[OpTypeHitObjectNV].size() == 0) {
+        type = new Instruction(getUniqueId(), NoType, OpTypeHitObjectNV);
+        groupedTypes[OpTypeHitObjectNV].push_back(type);
+        constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+        module.mapInstruction(type);
+    } else {
+        type = groupedTypes[OpTypeHitObjectNV].back();
+    }
+
+    return type->getResultId();
+}
 #endif
 
 Id Builder::getDerefTypeId(Id resultId) const
@@ -1345,7 +1373,7 @@
 }
 
 // return true if the type is a pointer to PhysicalStorageBufferEXT or an
-// array of such pointers. These require restrict/aliased decorations.
+// contains such a pointer. These require restrict/aliased decorations.
 bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const
 {
     const Instruction& instr = *module.getInstruction(typeId);
@@ -1357,6 +1385,12 @@
         return getTypeStorageClass(typeId) == StorageClassPhysicalStorageBufferEXT;
     case OpTypeArray:
         return containsPhysicalStorageBufferOrArray(getContainedTypeId(typeId));
+    case OpTypeStruct:
+        for (int m = 0; m < instr.getNumOperands(); ++m) {
+            if (containsPhysicalStorageBufferOrArray(instr.getIdOperand(m)))
+                return true;
+        }
+        return false;
     default:
         return false;
     }
@@ -1675,7 +1709,7 @@
 
 Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps)
 {
-    Instruction* constant = 0;
+    Instruction* constant = nullptr;
     bool found = false;
     for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) {
         constant = groupedConstants[typeClass][i];
@@ -1702,7 +1736,7 @@
 
 Id Builder::findStructConstant(Id typeId, const std::vector<Id>& comps)
 {
-    Instruction* constant = 0;
+    Instruction* constant = nullptr;
     bool found = false;
     for (int i = 0; i < (int)groupedStructConstants[typeId].size(); ++i) {
         constant = groupedStructConstants[typeId][i];
@@ -2047,11 +2081,16 @@
         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 getParamTypeId = [this](Id const& typeId) {
+                if (isPointerType(typeId) || isArrayType(typeId)) {
+                    return getContainedTypeId(typeId);
+                }
+                else {
+                    return typeId;
+                }
+            };
             auto const& paramName = paramNames[p];
-            auto const debugLocalVariableId = createDebugLocalVariable(debugId[getContainedTypeId(paramType)], paramName, p+1);
+            auto const debugLocalVariableId = createDebugLocalVariable(debugId[getParamTypeId(paramTypes[p])], paramName, p+1);
             debugId[firstParamId + p] = debugLocalVariableId;
 
             makeDebugDeclare(debugLocalVariableId, firstParamId + p);
@@ -2070,7 +2109,8 @@
     return function;
 }
 
-Id Builder::makeDebugFunction(Function* function, Id nameId, Id funcTypeId) {
+Id Builder::makeDebugFunction([[maybe_unused]] Function* function, Id nameId, Id funcTypeId)
+{
     assert(function != nullptr);
     assert(nameId != 0);
     assert(funcTypeId != 0);
@@ -2095,6 +2135,8 @@
 }
 
 Id Builder::makeDebugLexicalBlock(uint32_t line) {
+    assert(!currentDebugScopeId.empty());
+
     Id lexId = getUniqueId();
     auto lex = new Instruction(lexId, makeVoidType(), OpExtInst);
     lex->addIdOperand(nonSemanticShaderDebugInfo);
@@ -2734,52 +2776,49 @@
 Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather,
     bool noImplicitLod, const TextureParameters& parameters, ImageOperandsMask signExtensionMask)
 {
-    static const int maxTextureArgs = 10;
-    Id texArgs[maxTextureArgs] = {};
+    std::vector<Id> texArgs;
 
     //
     // Set up the fixed arguments
     //
-    int numArgs = 0;
     bool explicitLod = false;
-    texArgs[numArgs++] = parameters.sampler;
-    texArgs[numArgs++] = parameters.coords;
+    texArgs.push_back(parameters.sampler);
+    texArgs.push_back(parameters.coords);
     if (parameters.Dref != NoResult)
-        texArgs[numArgs++] = parameters.Dref;
+        texArgs.push_back(parameters.Dref);
     if (parameters.component != NoResult)
-        texArgs[numArgs++] = parameters.component;
+        texArgs.push_back(parameters.component);
 
 #ifndef GLSLANG_WEB
     if (parameters.granularity != NoResult)
-        texArgs[numArgs++] = parameters.granularity;
+        texArgs.push_back(parameters.granularity);
     if (parameters.coarse != NoResult)
-        texArgs[numArgs++] = parameters.coarse;
+        texArgs.push_back(parameters.coarse);
 #endif
 
     //
     // Set up the optional arguments
     //
-    int optArgNum = numArgs;    // track which operand, if it exists, is the mask of optional arguments
-    ++numArgs;                  // speculatively make room for the mask operand
+    size_t optArgNum = texArgs.size(); // the position of the mask for the optional arguments, if any.
     ImageOperandsMask mask = ImageOperandsMaskNone; // the mask operand
     if (parameters.bias) {
         mask = (ImageOperandsMask)(mask | ImageOperandsBiasMask);
-        texArgs[numArgs++] = parameters.bias;
+        texArgs.push_back(parameters.bias);
     }
     if (parameters.lod) {
         mask = (ImageOperandsMask)(mask | ImageOperandsLodMask);
-        texArgs[numArgs++] = parameters.lod;
+        texArgs.push_back(parameters.lod);
         explicitLod = true;
     } else if (parameters.gradX) {
         mask = (ImageOperandsMask)(mask | ImageOperandsGradMask);
-        texArgs[numArgs++] = parameters.gradX;
-        texArgs[numArgs++] = parameters.gradY;
+        texArgs.push_back(parameters.gradX);
+        texArgs.push_back(parameters.gradY);
         explicitLod = true;
     } else if (noImplicitLod && ! fetch && ! gather) {
         // have to explicitly use lod of 0 if not allowed to have them be implicit, and
         // we would otherwise be about to issue an implicit instruction
         mask = (ImageOperandsMask)(mask | ImageOperandsLodMask);
-        texArgs[numArgs++] = makeFloatConstant(0.0);
+        texArgs.push_back(makeFloatConstant(0.0));
         explicitLod = true;
     }
     if (parameters.offset) {
@@ -2789,24 +2828,24 @@
             addCapability(CapabilityImageGatherExtended);
             mask = (ImageOperandsMask)(mask | ImageOperandsOffsetMask);
         }
-        texArgs[numArgs++] = parameters.offset;
+        texArgs.push_back(parameters.offset);
     }
     if (parameters.offsets) {
         addCapability(CapabilityImageGatherExtended);
         mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask);
-        texArgs[numArgs++] = parameters.offsets;
+        texArgs.push_back(parameters.offsets);
     }
 #ifndef GLSLANG_WEB
     if (parameters.sample) {
         mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask);
-        texArgs[numArgs++] = parameters.sample;
+        texArgs.push_back(parameters.sample);
     }
     if (parameters.lodClamp) {
         // capability if this bit is used
         addCapability(CapabilityMinLod);
 
         mask = (ImageOperandsMask)(mask | ImageOperandsMinLodMask);
-        texArgs[numArgs++] = parameters.lodClamp;
+        texArgs.push_back(parameters.lodClamp);
     }
     if (parameters.nonprivate) {
         mask = mask | ImageOperandsNonPrivateTexelKHRMask;
@@ -2816,10 +2855,9 @@
     }
 #endif
     mask = mask | signExtensionMask;
-    if (mask == ImageOperandsMaskNone)
-        --numArgs;  // undo speculative reservation for the mask argument
-    else
-        texArgs[optArgNum] = mask;
+    // insert the operand for the mask, if any bits were set.
+    if (mask != ImageOperandsMaskNone)
+        texArgs.insert(texArgs.begin() + optArgNum, mask);
 
     //
     // Set up the instruction
@@ -2923,11 +2961,11 @@
 
     // Build the SPIR-V instruction
     Instruction* textureInst = new Instruction(getUniqueId(), resultType, opCode);
-    for (int op = 0; op < optArgNum; ++op)
+    for (size_t op = 0; op < optArgNum; ++op)
         textureInst->addIdOperand(texArgs[op]);
-    if (optArgNum < numArgs)
+    if (optArgNum < texArgs.size())
         textureInst->addImmediateOperand(texArgs[optArgNum]);
-    for (int op = optArgNum + 1; op < numArgs; ++op)
+    for (size_t op = optArgNum + 1; op < texArgs.size(); ++op)
         textureInst->addIdOperand(texArgs[op]);
     setPrecision(textureInst->getResultId(), precision);
     buildPoint->addInstruction(std::unique_ptr<Instruction>(textureInst));
@@ -3332,7 +3370,7 @@
     builder(gb),
     condition(cond),
     control(ctrl),
-    elseBlock(0)
+    elseBlock(nullptr)
 {
     function = &builder.getBuildPoint()->getParent();
 
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index f7fdc6a..70edf25 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -103,7 +103,7 @@
         stringIds[file_c_str] = strId;
         return strId;
     }
-    spv::Id getSourceFile() const 
+    spv::Id getSourceFile() const
     {
         return sourceFileStringId;
     }
@@ -240,6 +240,8 @@
     Id makeAccelerationStructureType();
     // rayQueryEXT type
     Id makeRayQueryType();
+    // hitObjectNV type
+    Id makeHitObjectNVType();
 
     // For querying about types.
     Id getTypeId(Id resultId) const { return module.getTypeId(resultId); }
@@ -414,7 +416,7 @@
     // 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<char const*>& paramNames,
-        const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
+        const std::vector<std::vector<Decoration>>& precisions, Block **entry = nullptr);
 
     // Create a return. An 'implicit' return is one not appearing in the source
     // code.  In the case of an implicit return, no post-return block is inserted.
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
index dd6dabc..b185f61 100644
--- a/SPIRV/SpvPostProcess.cpp
+++ b/SPIRV/SpvPostProcess.cpp
@@ -52,6 +52,7 @@
     #include "GLSL.ext.EXT.h"
     #include "GLSL.ext.AMD.h"
     #include "GLSL.ext.NV.h"
+    #include "GLSL.ext.ARM.h"
 }
 
 namespace spv {
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index 2529993..ff04f4f 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -212,8 +212,7 @@
     optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass());
     if (options->optimizeSize) {
         optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
-        if (intermediate.getStage() == EShLanguage::EShLangVertex)
-            optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass());
+        optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsSafePass());
     }
     optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
@@ -224,6 +223,56 @@
     optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
 }
 
+bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                       std::unordered_set<uint32_t>* live_locs,
+                                       std::unordered_set<uint32_t>* live_builtins,
+                                       spv::SpvBuildLogger*)
+{
+  spvtools::Optimizer optimizer(target_env);
+  optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
+
+  optimizer.RegisterPass(spvtools::CreateAnalyzeLiveInputPass(live_locs, live_builtins));
+
+  spvtools::OptimizerOptions spvOptOptions;
+  optimizer.SetTargetEnv(target_env);
+  spvOptOptions.set_run_validator(false);
+  return optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
+}
+
+void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                         std::unordered_set<uint32_t>* live_locs,
+                                         std::unordered_set<uint32_t>* live_builtins,
+                                         spv::SpvBuildLogger*)
+{
+  spvtools::Optimizer optimizer(target_env);
+  optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
+
+  optimizer.RegisterPass(spvtools::CreateEliminateDeadOutputStoresPass(live_locs, live_builtins));
+  optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass(false, true));
+  optimizer.RegisterPass(spvtools::CreateEliminateDeadOutputComponentsPass());
+  optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass(false, true));
+
+  spvtools::OptimizerOptions spvOptOptions;
+  optimizer.SetTargetEnv(target_env);
+  spvOptOptions.set_run_validator(false);
+  optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
+}
+
+void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                            spv::SpvBuildLogger*)
+{
+  spvtools::Optimizer optimizer(target_env);
+  optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
+
+  optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass());
+  optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
+
+  spvtools::OptimizerOptions spvOptOptions;
+  optimizer.SetTargetEnv(target_env);
+  spvOptOptions.set_run_validator(false);
+  optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
+}
+
 // Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V.  This is implicitly done by
 // SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
 // optimization is disabled.
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index 5386048..6fc4e40 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -65,6 +65,9 @@
 
 #if ENABLE_OPT
 
+// Translate glslang's view of target versioning to what SPIRV-Tools uses.
+spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger);
+
 // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
 void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
 
@@ -80,6 +83,22 @@
 void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
                          spv::SpvBuildLogger*, const SpvOptions*);
 
+// Apply the SPIRV-Tools EliminateDeadInputComponents pass to generated SPIR-V. Put result in |spirv|.
+void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                            spv::SpvBuildLogger*);
+
+// Apply the SPIRV-Tools AnalyzeDeadOutputStores pass to generated SPIR-V. Put result in |live_locs|.
+// Return true if the result is valid.
+bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                       std::unordered_set<uint32_t>* live_locs,
+                                       std::unordered_set<uint32_t>* live_builtins, spv::SpvBuildLogger*);
+
+// Apply the SPIRV-Tools EliminateDeadOutputStores and AggressiveDeadCodeElimination passes to generated SPIR-V using
+// |live_locs|. Put result in |spirv|.
+void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                         std::unordered_set<uint32_t>* live_locs,
+                                         std::unordered_set<uint32_t>* live_builtins, spv::SpvBuildLogger*);
+
 // Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V.  This is implicitly done by
 // SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
 // optimization is disabled.
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 74dd605..479f4a6 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -54,6 +54,8 @@
         #include "GLSL.std.450.h"
         #include "GLSL.ext.AMD.h"
         #include "GLSL.ext.NV.h"
+        #include "GLSL.ext.ARM.h"
+        #include "NonSemanticShaderDebugInfo100.h"
     }
 }
 const char* GlslStd450DebugNames[spv::GLSLstd450Count];
@@ -62,6 +64,7 @@
 
 static const char* GLSLextAMDGetDebugNames(const char*, unsigned);
 static const char* GLSLextNVGetDebugNames(const char*, unsigned);
+static const char* NonSemanticShaderDebugInfo100GetDebugNames(unsigned);
 
 static void Kill(std::ostream& out, const char* message)
 {
@@ -76,6 +79,7 @@
     GLSLextNVInst,
     OpenCLExtInst,
     NonSemanticDebugPrintfExtInst,
+    NonSemanticShaderDebugInfo100
 };
 
 // Container class for a single instance of a SPIR-V stream, with methods for disassembly.
@@ -501,6 +505,8 @@
                     extInstSet = OpenCLExtInst;
                 } else if (strcmp("NonSemantic.DebugPrintf", name) == 0) {
                     extInstSet = NonSemanticDebugPrintfExtInst;
+                } else if (strcmp("NonSemantic.Shader.DebugInfo.100", name) == 0) {
+                    extInstSet = NonSemanticShaderDebugInfo100;
                 } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 ||
                            strcmp(spv::E_SPV_AMD_shader_trinary_minmax, name) == 0 ||
                            strcmp(spv::E_SPV_AMD_shader_explicit_vertex_parameter, name) == 0 ||
@@ -509,7 +515,7 @@
                 } else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 ||
                           strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 ||
                           strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 ||
-                          strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 || 
+                          strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0 ||
                           strcmp(spv::E_SPV_NV_fragment_shader_barycentric, name) == 0 ||
                           strcmp(spv::E_SPV_NV_mesh_shader, name) == 0) {
                     extInstSet = GLSLextNVInst;
@@ -526,6 +532,8 @@
                     out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")";
                 } else if (extInstSet == NonSemanticDebugPrintfExtInst) {
                     out << "(DebugPrintf)";
+                } else if (extInstSet == NonSemanticShaderDebugInfo100) {
+                    out << "(" << NonSemanticShaderDebugInfo100GetDebugNames(entrypoint) << ")";
                 }
             }
             break;
@@ -749,6 +757,59 @@
     return "Bad";
 }
 
+static const char* NonSemanticShaderDebugInfo100GetDebugNames(unsigned entrypoint)
+{
+    switch (entrypoint) {
+        case NonSemanticShaderDebugInfo100DebugInfoNone:                        return "DebugInfoNone";
+        case NonSemanticShaderDebugInfo100DebugCompilationUnit:                 return "DebugCompilationUnit";
+        case NonSemanticShaderDebugInfo100DebugTypeBasic:                       return "DebugTypeBasic";
+        case NonSemanticShaderDebugInfo100DebugTypePointer:                     return "DebugTypePointer";
+        case NonSemanticShaderDebugInfo100DebugTypeQualifier:                   return "DebugTypeQualifier";
+        case NonSemanticShaderDebugInfo100DebugTypeArray:                       return "DebugTypeArray";
+        case NonSemanticShaderDebugInfo100DebugTypeVector:                      return "DebugTypeVector";
+        case NonSemanticShaderDebugInfo100DebugTypedef:                         return "DebugTypedef";
+        case NonSemanticShaderDebugInfo100DebugTypeFunction:                    return "DebugTypeFunction";
+        case NonSemanticShaderDebugInfo100DebugTypeEnum:                        return "DebugTypeEnum";
+        case NonSemanticShaderDebugInfo100DebugTypeComposite:                   return "DebugTypeComposite";
+        case NonSemanticShaderDebugInfo100DebugTypeMember:                      return "DebugTypeMember";
+        case NonSemanticShaderDebugInfo100DebugTypeInheritance:                 return "DebugTypeInheritance";
+        case NonSemanticShaderDebugInfo100DebugTypePtrToMember:                 return "DebugTypePtrToMember";
+        case NonSemanticShaderDebugInfo100DebugTypeTemplate:                    return "DebugTypeTemplate";
+        case NonSemanticShaderDebugInfo100DebugTypeTemplateParameter:           return "DebugTypeTemplateParameter";
+        case NonSemanticShaderDebugInfo100DebugTypeTemplateTemplateParameter:   return "DebugTypeTemplateTemplateParameter";
+        case NonSemanticShaderDebugInfo100DebugTypeTemplateParameterPack:       return "DebugTypeTemplateParameterPack";
+        case NonSemanticShaderDebugInfo100DebugGlobalVariable:                  return "DebugGlobalVariable";
+        case NonSemanticShaderDebugInfo100DebugFunctionDeclaration:             return "DebugFunctionDeclaration";
+        case NonSemanticShaderDebugInfo100DebugFunction:                        return "DebugFunction";
+        case NonSemanticShaderDebugInfo100DebugLexicalBlock:                    return "DebugLexicalBlock";
+        case NonSemanticShaderDebugInfo100DebugLexicalBlockDiscriminator:       return "DebugLexicalBlockDiscriminator";
+        case NonSemanticShaderDebugInfo100DebugScope:                           return "DebugScope";
+        case NonSemanticShaderDebugInfo100DebugNoScope:                         return "DebugNoScope";
+        case NonSemanticShaderDebugInfo100DebugInlinedAt:                       return "DebugInlinedAt";
+        case NonSemanticShaderDebugInfo100DebugLocalVariable:                   return "DebugLocalVariable";
+        case NonSemanticShaderDebugInfo100DebugInlinedVariable:                 return "DebugInlinedVariable";
+        case NonSemanticShaderDebugInfo100DebugDeclare:                         return "DebugDeclare";
+        case NonSemanticShaderDebugInfo100DebugValue:                           return "DebugValue";
+        case NonSemanticShaderDebugInfo100DebugOperation:                       return "DebugOperation";
+        case NonSemanticShaderDebugInfo100DebugExpression:                      return "DebugExpression";
+        case NonSemanticShaderDebugInfo100DebugMacroDef:                        return "DebugMacroDef";
+        case NonSemanticShaderDebugInfo100DebugMacroUndef:                      return "DebugMacroUndef";
+        case NonSemanticShaderDebugInfo100DebugImportedEntity:                  return "DebugImportedEntity";
+        case NonSemanticShaderDebugInfo100DebugSource:                          return "DebugSource";
+        case NonSemanticShaderDebugInfo100DebugFunctionDefinition:              return "DebugFunctionDefinition";
+        case NonSemanticShaderDebugInfo100DebugSourceContinued:                 return "DebugSourceContinued";
+        case NonSemanticShaderDebugInfo100DebugLine:                            return "DebugLine";
+        case NonSemanticShaderDebugInfo100DebugNoLine:                          return "DebugNoLine";
+        case NonSemanticShaderDebugInfo100DebugBuildIdentifier:                 return "DebugBuildIdentifier";
+        case NonSemanticShaderDebugInfo100DebugStoragePath:                     return "DebugStoragePath";
+        case NonSemanticShaderDebugInfo100DebugEntryPoint:                      return "DebugEntryPoint";
+        case NonSemanticShaderDebugInfo100DebugTypeMatrix:                      return "DebugTypeMatrix";
+        default:                                                                return "Bad";
+    }
+
+    return "Bad";
+}
+
 void Disassemble(std::ostream& out, const std::vector<unsigned int>& stream)
 {
     SpirvStream SpirvStream(out, stream);
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
old mode 100644
new mode 100755
index b7fe3e7..b25f37e
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -45,6 +45,7 @@
 #include <cstdio>
 #include <cstring>
 #include <algorithm>
+#include <mutex>
 
 namespace spv {
     extern "C" {
@@ -53,6 +54,7 @@
         #include "GLSL.ext.EXT.h"
         #include "GLSL.ext.AMD.h"
         #include "GLSL.ext.NV.h"
+        #include "GLSL.ext.ARM.h"
     }
 }
 
@@ -214,6 +216,10 @@
     case ExecutionModeNoGlobalOffsetINTEL:      return "NoGlobalOffsetINTEL";
     case ExecutionModeNumSIMDWorkitemsINTEL:    return "NumSIMDWorkitemsINTEL";
 
+    case ExecutionModeNonCoherentColorAttachmentReadEXT:        return "NonCoherentColorAttachmentReadEXT";
+    case ExecutionModeNonCoherentDepthAttachmentReadEXT:        return "NonCoherentDepthAttachmentReadEXT";
+    case ExecutionModeNonCoherentStencilAttachmentReadEXT:      return "NonCoherentStencilAttachmentReadEXT";
+
     case ExecutionModeCeiling:
     default: return "Bad";
     }
@@ -245,6 +251,8 @@
 
     case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
     case StorageClassTaskPayloadWorkgroupEXT:  return "TaskPayloadWorkgroupEXT";
+    case StorageClassHitObjectAttributeNV:     return "HitObjectAttributeNV";
+    case StorageClassTileImageEXT:             return "TileImageEXT";
     default: return "Bad";
     }
 }
@@ -311,7 +319,7 @@
     case DecorationPerPrimitiveNV:              return "PerPrimitiveNV";
     case DecorationPerViewNV:                   return "PerViewNV";
     case DecorationPerTaskNV:                   return "PerTaskNV";
-    
+
     case DecorationPerVertexKHR:                return "PerVertexKHR";
 
     case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
@@ -319,6 +327,8 @@
     case DecorationHlslSemanticGOOGLE:      return "DecorationHlslSemanticGOOGLE";
     case DecorationRestrictPointerEXT:      return "DecorationRestrictPointerEXT";
     case DecorationAliasedPointerEXT:       return "DecorationAliasedPointerEXT";
+
+    case DecorationHitObjectShaderRecordBufferNV:  return "DecorationHitObjectShaderRecordBufferNV";
     }
 }
 
@@ -400,6 +410,7 @@
     case BuiltInRayTminKHR:                  return "RayTminKHR";
     case BuiltInRayTmaxKHR:                  return "RayTmaxKHR";
     case BuiltInCullMaskKHR:                 return "CullMaskKHR";
+    case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
     case BuiltInInstanceCustomIndexKHR:      return "InstanceCustomIndexKHR";
     case BuiltInRayGeometryIndexKHR:         return "RayGeometryIndexKHR";
     case BuiltInObjectToWorldKHR:            return "ObjectToWorldKHR";
@@ -439,6 +450,11 @@
     case BuiltInPrimitiveLineIndicesEXT:         return "PrimitiveLineIndicesEXT";
     case BuiltInPrimitiveTriangleIndicesEXT:     return "PrimitiveTriangleIndicesEXT";
     case BuiltInCullPrimitiveEXT:                return "CullPrimitiveEXT";
+    case BuiltInCoreCountARM:           return "CoreCountARM";
+    case BuiltInCoreIDARM:              return "CoreIDARM";
+    case BuiltInCoreMaxIDARM:           return "CoreMaxIDARM";
+    case BuiltInWarpIDARM:              return "WarpIDARM";
+    case BuiltInWarpMaxIDARM:           return "BuiltInWarpMaxIDARM";
 
     default: return "Bad";
     }
@@ -454,6 +470,7 @@
     case 4:  return "Rect";
     case 5:  return "Buffer";
     case 6:  return "SubpassData";
+    case DimTileImageDataEXT:  return "TileImageDataEXT";
 
     default: return "Bad";
     }
@@ -568,7 +585,7 @@
     case 17: return "sRGBA";
     case 18: return "sBGRA";
 
-    default: 
+    default:
         return "Bad";
     }
 }
@@ -854,7 +871,7 @@
     case 22: return "Int16";
     case 23: return "TessellationPointSize";
     case 24: return "GeometryPointSize";
-    case 25: return "ImageGatherExtended"; 
+    case 25: return "ImageGatherExtended";
     case 26: return "Bad";
     case 27: return "StorageImageMultisample";
     case 28: return "UniformBufferArrayDynamicIndexing";
@@ -941,6 +958,8 @@
     case CapabilityRayQueryKHR:                     return "RayQueryKHR";
     case CapabilityRayTracingProvisionalKHR:        return "RayTracingProvisionalKHR";
     case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
+    case CapabilityRayTracingPositionFetchKHR:      return "RayTracingPositionFetchKHR";
+    case CapabilityRayQueryPositionFetchKHR:        return "RayQueryPositionFetchKHR";
     case CapabilityComputeDerivativeGroupQuadsNV:   return "ComputeDerivativeGroupQuadsNV";
     case CapabilityComputeDerivativeGroupLinearNV:  return "ComputeDerivativeGroupLinearNV";
     case CapabilityFragmentBarycentricKHR:          return "FragmentBarycentricKHR";
@@ -980,6 +999,10 @@
     case CapabilityFragmentShaderPixelInterlockEXT:         return "CapabilityFragmentShaderPixelInterlockEXT";
     case CapabilityFragmentShaderShadingRateInterlockEXT:   return "CapabilityFragmentShaderShadingRateInterlockEXT";
 
+    case CapabilityTileImageColorReadAccessEXT:           return "TileImageColorReadAccessEXT";
+    case CapabilityTileImageDepthReadAccessEXT:           return "TileImageDepthReadAccessEXT";
+    case CapabilityTileImageStencilReadAccessEXT:         return "TileImageStencilReadAccessEXT";
+
     case CapabilityFragmentShadingRateKHR:                  return "FragmentShadingRateKHR";
 
     case CapabilityDemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
@@ -998,7 +1021,9 @@
     case CapabilityWorkgroupMemoryExplicitLayoutKHR:            return "CapabilityWorkgroupMemoryExplicitLayoutKHR";
     case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR:  return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR";
     case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR";
+    case CapabilityCoreBuiltinsARM:                             return "CoreBuiltinsARM";
 
+    case CapabilityShaderInvocationReorderNV:                return "ShaderInvocationReorderNV";
     default: return "Bad";
     }
 }
@@ -1441,6 +1466,7 @@
     case OpRayQueryGetWorldRayOriginKHR:                                      return "OpRayQueryGetWorldRayOriginKHR";
     case OpRayQueryGetIntersectionObjectToWorldKHR:                           return "OpRayQueryGetIntersectionObjectToWorldKHR";
     case OpRayQueryGetIntersectionWorldToObjectKHR:                           return "OpRayQueryGetIntersectionWorldToObjectKHR";
+    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR:                 return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
 
     case OpTypeCooperativeMatrixNV:         return "OpTypeCooperativeMatrixNV";
     case OpCooperativeMatrixLoadNV:         return "OpCooperativeMatrixLoadNV";
@@ -1453,6 +1479,44 @@
     case OpBeginInvocationInterlockEXT:     return "OpBeginInvocationInterlockEXT";
     case OpEndInvocationInterlockEXT:       return "OpEndInvocationInterlockEXT";
 
+    case OpTypeHitObjectNV:                     return "OpTypeHitObjectNV";
+    case OpHitObjectTraceRayNV:                 return "OpHitObjectTraceRayNV";
+    case OpHitObjectTraceRayMotionNV:           return "OpHitObjectTraceRayMotionNV";
+    case OpHitObjectRecordHitNV:                return "OpHitObjectRecordHitNV";
+    case OpHitObjectRecordHitMotionNV:          return "OpHitObjectRecordHitMotionNV";
+    case OpHitObjectRecordHitWithIndexNV:       return "OpHitObjectRecordHitWithIndexNV";
+    case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
+    case OpHitObjectRecordMissNV:               return "OpHitObjectRecordMissNV";
+    case OpHitObjectRecordMissMotionNV:         return "OpHitObjectRecordMissMotionNV";
+    case OpHitObjectRecordEmptyNV:              return "OpHitObjectRecordEmptyNV";
+    case OpHitObjectExecuteShaderNV:            return "OpHitObjectExecuteShaderNV";
+    case OpReorderThreadWithHintNV:             return "OpReorderThreadWithHintNV";
+    case OpReorderThreadWithHitObjectNV:        return "OpReorderThreadWithHitObjectNV";
+    case OpHitObjectGetCurrentTimeNV:           return "OpHitObjectGetCurrentTimeNV";
+    case OpHitObjectGetAttributesNV:            return "OpHitObjectGetAttributesNV";
+    case OpHitObjectGetHitKindNV:               return "OpHitObjectGetFrontFaceNV";
+    case OpHitObjectGetPrimitiveIndexNV:        return "OpHitObjectGetPrimitiveIndexNV";
+    case OpHitObjectGetGeometryIndexNV:         return "OpHitObjectGetGeometryIndexNV";
+    case OpHitObjectGetInstanceIdNV:            return "OpHitObjectGetInstanceIdNV";
+    case OpHitObjectGetInstanceCustomIndexNV:   return "OpHitObjectGetInstanceCustomIndexNV";
+    case OpHitObjectGetObjectRayDirectionNV:    return "OpHitObjectGetObjectRayDirectionNV";
+    case OpHitObjectGetObjectRayOriginNV:       return "OpHitObjectGetObjectRayOriginNV";
+    case OpHitObjectGetWorldRayDirectionNV:     return "OpHitObjectGetWorldRayDirectionNV";
+    case OpHitObjectGetWorldRayOriginNV:        return "OpHitObjectGetWorldRayOriginNV";
+    case OpHitObjectGetWorldToObjectNV:         return "OpHitObjectGetWorldToObjectNV";
+    case OpHitObjectGetObjectToWorldNV:         return "OpHitObjectGetObjectToWorldNV";
+    case OpHitObjectGetRayTMaxNV:               return "OpHitObjectGetRayTMaxNV";
+    case OpHitObjectGetRayTMinNV:               return "OpHitObjectGetRayTMinNV";
+    case OpHitObjectIsEmptyNV:                  return "OpHitObjectIsEmptyNV";
+    case OpHitObjectIsHitNV:                    return "OpHitObjectIsHitNV";
+    case OpHitObjectIsMissNV:                   return "OpHitObjectIsMissNV";
+    case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
+    case OpHitObjectGetShaderRecordBufferHandleNV:   return "OpHitObjectGetShaderRecordBufferHandleNV";
+
+    case OpColorAttachmentReadEXT:          return "OpColorAttachmentReadEXT";
+    case OpDepthAttachmentReadEXT:          return "OpDepthAttachmentReadEXT";
+    case OpStencilAttachmentReadEXT:        return "OpStencilAttachmentReadEXT";
+
     default:
         return "Bad";
     }
@@ -1477,1559 +1541,1752 @@
 void Parameterize()
 {
     // only do this once.
-    static bool initialized = false;
-    if (initialized)
-        return;
-    initialized = true;
+    static std::once_flag initialized;
+    std::call_once(initialized, [](){
 
-    // Exceptions to having a result <id> and a resulting type <id>.
-    // (Everything is initialized to have both).
+        // Exceptions to having a result <id> and a resulting type <id>.
+        // (Everything is initialized to have both).
 
-    InstructionDesc[OpNop].setResultAndType(false, false);
-    InstructionDesc[OpSource].setResultAndType(false, false);
-    InstructionDesc[OpSourceContinued].setResultAndType(false, false);
-    InstructionDesc[OpSourceExtension].setResultAndType(false, false);
-    InstructionDesc[OpExtension].setResultAndType(false, false);
-    InstructionDesc[OpExtInstImport].setResultAndType(true, false);
-    InstructionDesc[OpCapability].setResultAndType(false, false);
-    InstructionDesc[OpMemoryModel].setResultAndType(false, false);
-    InstructionDesc[OpEntryPoint].setResultAndType(false, false);
-    InstructionDesc[OpExecutionMode].setResultAndType(false, false);
-    InstructionDesc[OpExecutionModeId].setResultAndType(false, false);
-    InstructionDesc[OpTypeVoid].setResultAndType(true, false);
-    InstructionDesc[OpTypeBool].setResultAndType(true, false);
-    InstructionDesc[OpTypeInt].setResultAndType(true, false);
-    InstructionDesc[OpTypeFloat].setResultAndType(true, false);
-    InstructionDesc[OpTypeVector].setResultAndType(true, false);
-    InstructionDesc[OpTypeMatrix].setResultAndType(true, false);
-    InstructionDesc[OpTypeImage].setResultAndType(true, false);
-    InstructionDesc[OpTypeSampler].setResultAndType(true, false);
-    InstructionDesc[OpTypeSampledImage].setResultAndType(true, false);
-    InstructionDesc[OpTypeArray].setResultAndType(true, false);
-    InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false);
-    InstructionDesc[OpTypeStruct].setResultAndType(true, false);
-    InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
-    InstructionDesc[OpTypePointer].setResultAndType(true, false);
-    InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
-    InstructionDesc[OpTypeFunction].setResultAndType(true, false);
-    InstructionDesc[OpTypeEvent].setResultAndType(true, false);
-    InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
-    InstructionDesc[OpTypeReserveId].setResultAndType(true, false);
-    InstructionDesc[OpTypeQueue].setResultAndType(true, false);
-    InstructionDesc[OpTypePipe].setResultAndType(true, false);
-    InstructionDesc[OpFunctionEnd].setResultAndType(false, false);
-    InstructionDesc[OpStore].setResultAndType(false, false);
-    InstructionDesc[OpImageWrite].setResultAndType(false, false);
-    InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
-    InstructionDesc[OpDecorate].setResultAndType(false, false);
-    InstructionDesc[OpDecorateId].setResultAndType(false, false);
-    InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
-    InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
-    InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
-    InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
-    InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
-    InstructionDesc[OpName].setResultAndType(false, false);
-    InstructionDesc[OpMemberName].setResultAndType(false, false);
-    InstructionDesc[OpString].setResultAndType(true, false);
-    InstructionDesc[OpLine].setResultAndType(false, false);
-    InstructionDesc[OpNoLine].setResultAndType(false, false);
-    InstructionDesc[OpCopyMemory].setResultAndType(false, false);
-    InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
-    InstructionDesc[OpEmitVertex].setResultAndType(false, false);
-    InstructionDesc[OpEndPrimitive].setResultAndType(false, false);
-    InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false);
-    InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false);
-    InstructionDesc[OpControlBarrier].setResultAndType(false, false);
-    InstructionDesc[OpMemoryBarrier].setResultAndType(false, false);
-    InstructionDesc[OpAtomicStore].setResultAndType(false, false);
-    InstructionDesc[OpLoopMerge].setResultAndType(false, false);
-    InstructionDesc[OpSelectionMerge].setResultAndType(false, false);
-    InstructionDesc[OpLabel].setResultAndType(true, false);
-    InstructionDesc[OpBranch].setResultAndType(false, false);
-    InstructionDesc[OpBranchConditional].setResultAndType(false, false);
-    InstructionDesc[OpSwitch].setResultAndType(false, false);
-    InstructionDesc[OpKill].setResultAndType(false, false);
-    InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
-    InstructionDesc[OpReturn].setResultAndType(false, false);
-    InstructionDesc[OpReturnValue].setResultAndType(false, false);
-    InstructionDesc[OpUnreachable].setResultAndType(false, false);
-    InstructionDesc[OpLifetimeStart].setResultAndType(false, false);
-    InstructionDesc[OpLifetimeStop].setResultAndType(false, false);
-    InstructionDesc[OpCommitReadPipe].setResultAndType(false, false);
-    InstructionDesc[OpCommitWritePipe].setResultAndType(false, false);
-    InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false);
-    InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false);
-    InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false);
-    InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
-    InstructionDesc[OpRetainEvent].setResultAndType(false, false);
-    InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
-    InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
-    InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
-    InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
-    InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
-    InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
-    InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
-    InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
+        InstructionDesc[OpNop].setResultAndType(false, false);
+        InstructionDesc[OpSource].setResultAndType(false, false);
+        InstructionDesc[OpSourceContinued].setResultAndType(false, false);
+        InstructionDesc[OpSourceExtension].setResultAndType(false, false);
+        InstructionDesc[OpExtension].setResultAndType(false, false);
+        InstructionDesc[OpExtInstImport].setResultAndType(true, false);
+        InstructionDesc[OpCapability].setResultAndType(false, false);
+        InstructionDesc[OpMemoryModel].setResultAndType(false, false);
+        InstructionDesc[OpEntryPoint].setResultAndType(false, false);
+        InstructionDesc[OpExecutionMode].setResultAndType(false, false);
+        InstructionDesc[OpExecutionModeId].setResultAndType(false, false);
+        InstructionDesc[OpTypeVoid].setResultAndType(true, false);
+        InstructionDesc[OpTypeBool].setResultAndType(true, false);
+        InstructionDesc[OpTypeInt].setResultAndType(true, false);
+        InstructionDesc[OpTypeFloat].setResultAndType(true, false);
+        InstructionDesc[OpTypeVector].setResultAndType(true, false);
+        InstructionDesc[OpTypeMatrix].setResultAndType(true, false);
+        InstructionDesc[OpTypeImage].setResultAndType(true, false);
+        InstructionDesc[OpTypeSampler].setResultAndType(true, false);
+        InstructionDesc[OpTypeSampledImage].setResultAndType(true, false);
+        InstructionDesc[OpTypeArray].setResultAndType(true, false);
+        InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false);
+        InstructionDesc[OpTypeStruct].setResultAndType(true, false);
+        InstructionDesc[OpTypeOpaque].setResultAndType(true, false);
+        InstructionDesc[OpTypePointer].setResultAndType(true, false);
+        InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false);
+        InstructionDesc[OpTypeFunction].setResultAndType(true, false);
+        InstructionDesc[OpTypeEvent].setResultAndType(true, false);
+        InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false);
+        InstructionDesc[OpTypeReserveId].setResultAndType(true, false);
+        InstructionDesc[OpTypeQueue].setResultAndType(true, false);
+        InstructionDesc[OpTypePipe].setResultAndType(true, false);
+        InstructionDesc[OpFunctionEnd].setResultAndType(false, false);
+        InstructionDesc[OpStore].setResultAndType(false, false);
+        InstructionDesc[OpImageWrite].setResultAndType(false, false);
+        InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
+        InstructionDesc[OpDecorate].setResultAndType(false, false);
+        InstructionDesc[OpDecorateId].setResultAndType(false, false);
+        InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
+        InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
+        InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
+        InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
+        InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
+        InstructionDesc[OpName].setResultAndType(false, false);
+        InstructionDesc[OpMemberName].setResultAndType(false, false);
+        InstructionDesc[OpString].setResultAndType(true, false);
+        InstructionDesc[OpLine].setResultAndType(false, false);
+        InstructionDesc[OpNoLine].setResultAndType(false, false);
+        InstructionDesc[OpCopyMemory].setResultAndType(false, false);
+        InstructionDesc[OpCopyMemorySized].setResultAndType(false, false);
+        InstructionDesc[OpEmitVertex].setResultAndType(false, false);
+        InstructionDesc[OpEndPrimitive].setResultAndType(false, false);
+        InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false);
+        InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false);
+        InstructionDesc[OpControlBarrier].setResultAndType(false, false);
+        InstructionDesc[OpMemoryBarrier].setResultAndType(false, false);
+        InstructionDesc[OpAtomicStore].setResultAndType(false, false);
+        InstructionDesc[OpLoopMerge].setResultAndType(false, false);
+        InstructionDesc[OpSelectionMerge].setResultAndType(false, false);
+        InstructionDesc[OpLabel].setResultAndType(true, false);
+        InstructionDesc[OpBranch].setResultAndType(false, false);
+        InstructionDesc[OpBranchConditional].setResultAndType(false, false);
+        InstructionDesc[OpSwitch].setResultAndType(false, false);
+        InstructionDesc[OpKill].setResultAndType(false, false);
+        InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
+        InstructionDesc[OpReturn].setResultAndType(false, false);
+        InstructionDesc[OpReturnValue].setResultAndType(false, false);
+        InstructionDesc[OpUnreachable].setResultAndType(false, false);
+        InstructionDesc[OpLifetimeStart].setResultAndType(false, false);
+        InstructionDesc[OpLifetimeStop].setResultAndType(false, false);
+        InstructionDesc[OpCommitReadPipe].setResultAndType(false, false);
+        InstructionDesc[OpCommitWritePipe].setResultAndType(false, false);
+        InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false);
+        InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false);
+        InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false);
+        InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false);
+        InstructionDesc[OpRetainEvent].setResultAndType(false, false);
+        InstructionDesc[OpReleaseEvent].setResultAndType(false, false);
+        InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false);
+        InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false);
+        InstructionDesc[OpModuleProcessed].setResultAndType(false, false);
+        InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false);
+        InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false);
+        InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
+        InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
 
-    // Specific additional context-dependent operands
+        // Specific additional context-dependent operands
 
-    ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
+        ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
 
-    ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
-    ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
-    ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'");
+        ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'");
+        ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'");
+        ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'");
 
-    ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'");
-    ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'");
-    ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'");
+        ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'");
+        ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'");
+        ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'");
 
-    ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
-    ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
+        ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'");
+        ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'");
 
-    DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
-    DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
-    DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
-    DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
-    DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
-    DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
-    DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
-    DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
-    DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
-    DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
-    DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
-    DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
-    DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
-    DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
-    DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
-    DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
-    DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
-    DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
-    DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
-    DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
+        DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'");
+        DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'");
+        DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'");
+        DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'");
+        DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'");
+        DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'");
+        DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'");
+        DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'");
+        DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'");
+        DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'");
+        DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'");
+        DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <<BuiltIn,*BuiltIn*>>");
+        DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'");
+        DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'");
+        DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'");
+        DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'");
+        DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'");
+        DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'");
+        DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
+        DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
 
-    OperandClassParams[OperandSource].set(0, SourceString, 0);
-    OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
-    OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
-    OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
-    OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
-    OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
-    OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
-    OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
-    OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
-    OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
-    OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
-    OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
-    OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
-    OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
-    OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
-    OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
-    OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
-    OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
-    OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
-    OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
-    OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
-    OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
-    OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
-    OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
-    OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
-    OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
-    OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
-    OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
-    OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
-    OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
-    OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
-    OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
-    OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, 0);
+        OperandClassParams[OperandSource].set(0, SourceString, nullptr);
+        OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
+        OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
+        OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
+        OperandClassParams[OperandExecutionMode].set(ExecutionModeCeiling, ExecutionModeString, ExecutionModeParams);
+        OperandClassParams[OperandExecutionMode].setOperands(ExecutionModeOperands);
+        OperandClassParams[OperandStorage].set(0, StorageClassString, nullptr);
+        OperandClassParams[OperandDimensionality].set(0, DimensionString, nullptr);
+        OperandClassParams[OperandSamplerAddressingMode].set(0, SamplerAddressingModeString, nullptr);
+        OperandClassParams[OperandSamplerFilterMode].set(0, SamplerFilterModeString, nullptr);
+        OperandClassParams[OperandSamplerImageFormat].set(0, ImageFormatString, nullptr);
+        OperandClassParams[OperandImageChannelOrder].set(0, ImageChannelOrderString, nullptr);
+        OperandClassParams[OperandImageChannelDataType].set(0, ImageChannelDataTypeString, nullptr);
+        OperandClassParams[OperandImageOperands].set(ImageOperandsCeiling, ImageOperandsString, ImageOperandsParams, true);
+        OperandClassParams[OperandFPFastMath].set(0, FPFastMathString, nullptr, true);
+        OperandClassParams[OperandFPRoundingMode].set(0, FPRoundingModeString, nullptr);
+        OperandClassParams[OperandLinkageType].set(0, LinkageTypeString, nullptr);
+        OperandClassParams[OperandFuncParamAttr].set(0, FuncParamAttrString, nullptr);
+        OperandClassParams[OperandAccessQualifier].set(0, AccessQualifierString, nullptr);
+        OperandClassParams[OperandDecoration].set(DecorationCeiling, DecorationString, DecorationParams);
+        OperandClassParams[OperandDecoration].setOperands(DecorationOperands);
+        OperandClassParams[OperandBuiltIn].set(0, BuiltInString, nullptr);
+        OperandClassParams[OperandSelect].set(SelectControlCeiling, SelectControlString, SelectionControlParams, true);
+        OperandClassParams[OperandLoop].set(LoopControlCeiling, LoopControlString, LoopControlParams, true);
+        OperandClassParams[OperandFunction].set(FunctionControlCeiling, FunctionControlString, FunctionControlParams, true);
+        OperandClassParams[OperandMemorySemantics].set(0, MemorySemanticsString, nullptr, true);
+        OperandClassParams[OperandMemoryAccess].set(MemoryAccessCeiling, MemoryAccessString, MemoryAccessParams, true);
+        OperandClassParams[OperandScope].set(0, ScopeString, nullptr);
+        OperandClassParams[OperandGroupOperation].set(0, GroupOperationString, nullptr);
+        OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
+        OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
+        OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
+        OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);
 
-    // set name of operator, an initial set of <id> style operands, and the description
+        // set name of operator, an initial set of <id> style operands, and the description
 
-    InstructionDesc[OpSource].operands.push(OperandSource, "");
-    InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
-    InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
-    InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
+        InstructionDesc[OpSource].operands.push(OperandSource, "");
+        InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'");
+        InstructionDesc[OpSource].operands.push(OperandId, "'File'", true);
+        InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true);
 
-    InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
+        InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'");
 
-    InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
+        InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'");
 
-    InstructionDesc[OpName].operands.push(OperandId, "'Target'");
-    InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'");
+        InstructionDesc[OpName].operands.push(OperandId, "'Target'");
+        InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'");
 
-    InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'");
-    InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'");
-    InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'");
+        InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'");
+        InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'");
+        InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'");
 
-    InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
+        InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'");
 
-    InstructionDesc[OpLine].operands.push(OperandId, "'File'");
-    InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
-    InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
+        InstructionDesc[OpLine].operands.push(OperandId, "'File'");
+        InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'");
+        InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'");
 
-    InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'");
+        InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'");
 
-    InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'");
+        InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'");
 
-    InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'");
+        InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'");
 
-    InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, "");
-    InstructionDesc[OpMemoryModel].operands.push(OperandMemory, "");
+        InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, "");
+        InstructionDesc[OpMemoryModel].operands.push(OperandMemory, "");
 
-    InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
-    InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
-    InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
-    InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
+        InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, "");
+        InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'");
+        InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'");
+        InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'");
 
-    InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
-    InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
-    InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
+        InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'");
+        InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'");
+        InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <<Execution_Mode,Execution Mode>>");
 
-    InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'");
-    InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'");
-    InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <<Execution_Mode,Execution Mode>>");
+        InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'");
+        InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'");
+        InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <<Execution_Mode,Execution Mode>>");
 
-    InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
-    InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
+        InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'");
+        InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'");
 
-    InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'");
+        InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'");
 
-    InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
-    InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
+        InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'");
+        InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'");
 
-    InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
-    InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
+        InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'");
+        InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'");
 
-    InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'");
-    InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, "");
-    InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'");
-    InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'");
-    InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
-    InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
-    InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
-    InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
+        InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'");
+        InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, "");
+        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'");
+        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'");
+        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'");
+        InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'");
+        InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, "");
+        InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true);
 
-    InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
+        InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'");
 
-    InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
-    InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
+        InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'");
+        InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'");
 
-    InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
+        InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'");
 
-    InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
+        InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n...");
 
-    InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
+        InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type.");
 
-    InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
-    InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
+        InstructionDesc[OpTypePointer].operands.push(OperandStorage, "");
+        InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'");
 
-    InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
-    InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
+        InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'");
+        InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, "");
 
-    InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
+        InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'");
 
-    InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
-    InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
+        InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'");
+        InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n...");
 
-    InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'");
+        InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'");
 
-    InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
+        InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
 
-    InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
-    InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
-    InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
+        InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, "");
+        InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'");
+        InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, "");
 
-    InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'");
+        InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'");
 
-    InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
+        InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'");
 
-    InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'");
-    InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
+        InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'");
+        InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'");
 
-    InstructionDesc[OpVariable].operands.push(OperandStorage, "");
-    InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
+        InstructionDesc[OpVariable].operands.push(OperandStorage, "");
+        InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true);
 
-    InstructionDesc[OpFunction].operands.push(OperandFunction, "");
-    InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
+        InstructionDesc[OpFunction].operands.push(OperandFunction, "");
+        InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'");
 
-    InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'");
-    InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
+        InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'");
+        InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n...");
 
-    InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'");
-    InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
-    InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
+        InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'");
+        InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
+        InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
 
-    InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
-    InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
-    InstructionDesc[OpLoad].operands.push(OperandId, "", true);
+        InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
+        InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
+        InstructionDesc[OpLoad].operands.push(OperandId, "", true);
 
-    InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
-    InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
-    InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true);
-    InstructionDesc[OpStore].operands.push(OperandId, "", true);
+        InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpStore].operands.push(OperandId, "'Object'");
+        InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true);
+        InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true);
+        InstructionDesc[OpStore].operands.push(OperandId, "", true);
 
-    InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
+        InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'");
 
-    InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'");
-    InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
-    InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
+        InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'");
+        InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
+        InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
 
-    InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
-    InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
-    InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
+        InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
+        InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
+        InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
 
-    InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
-    InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
-    InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
+        InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
+        InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
+        InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
 
-    InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
-    InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
-    InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
-    InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
+        InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
+        InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
+        InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
+        InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
 
-    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
-    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
-    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
-    InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
+        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
+        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
+        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
+        InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'");
 
-    InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
-    InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
+        InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
+        InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
 
-    InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'");
-    InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'");
+        InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'");
+        InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'");
 
-    InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'");
-    InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'");
+        InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'");
 
-    InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'");
-    InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'");
-    InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'");
+        InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'");
+        InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'");
 
-    InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'");
-    InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'");
-    InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'");
+        InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'");
+        InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'");
+        InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'");
 
-    InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'");
+        InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'");
 
-    InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'");
-    InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'");
+        InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'");
+        InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'");
 
-    InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'");
-    InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'");
-    InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'");
+        InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'");
+        InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'");
+        InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'");
 
-    InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
-    InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
-    InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
+        InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'");
+        InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'");
+        InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true);
 
-    InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
-    InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
-    InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
-    InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
+        InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'");
+        InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'");
+        InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'");
+        InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true);
 
-    InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
+        InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'");
 
-    InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'");
 
-    InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
-    InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
+        InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
-    InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'");
+        InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
-    InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'");
+        InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
-    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'");
+        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
+        InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
+        InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'");
 
-    InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
+        InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'");
 
-    InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'");
 
-    InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'");
 
-    InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'");
 
-    InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'");
 
-    InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'");
 
-    InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'");
 
-    InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+        InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'");
 
-    InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+        InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'");
 
-    InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
-    InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+        InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'");
+        InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
 
-    InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
-    InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
+        InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'");
+        InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'");
 
-    InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpNot].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpNot].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpAny].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpAny].operands.push(OperandId, "'Vector'");
 
-    InstructionDesc[OpAll].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpAll].operands.push(OperandId, "'Vector'");
 
-    InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'");
+        InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'");
 
-    InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'");
+        InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'");
 
-    InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'");
+        InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'");
 
-    InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'");
+        InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'");
 
-    InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'");
+        InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'");
 
-    InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'");
+        InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'");
 
-    InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
+        InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'");
 
-    InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
+        InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'");
 
-    InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
+        InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'");
 
-    InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'");
 
-    InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
+        InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'");
 
-    InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'");
 
-    InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'");
 
-    InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
+        InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'");
 
-    InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'");
 
-    InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'");
 
-    InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
+        InstructionDesc[OpIsNan].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
+        InstructionDesc[OpIsInf].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
+        InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
+        InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
+        InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'");
 
-    InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
-    InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
+        InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'");
+        InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
-    InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
+        InstructionDesc[OpOrdered].operands.push(OperandId, "'x'");
+        InstructionDesc[OpOrdered].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
-    InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
+        InstructionDesc[OpUnordered].operands.push(OperandId, "'x'");
+        InstructionDesc[OpUnordered].operands.push(OperandId, "'y'");
 
-    InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
-    InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
+        InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'");
+        InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'");
 
-    InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
-    InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
+        InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'");
 
-    InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
-    InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
+        InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'");
 
-    InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
-    InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'");
 
-    InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
-    InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
+        InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'");
 
-    InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
-    InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
+        InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'");
+        InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'");
 
-    InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
-    InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
+        InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'");
+        InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'");
 
-    InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
-    InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
+        InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'");
+        InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'");
 
-    InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
+        InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'");
 
-    InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'");
+        InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'");
 
-    InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'");
+        InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'");
 
-    InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'");
+        InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'");
 
-    InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
-    InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
-    InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
+        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'");
+        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'");
+        InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'");
 
-    InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
-    InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
-    
-    InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
-    InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
-    InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
-    
-    InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'");
+        InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'");
 
-    InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'");
+        InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'");
+        InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'");
 
-    InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'");
-    InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'");
-    InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'");
+        InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'");
 
-    InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'");
 
-    InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'");
+        InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'");
+        InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'");
 
-    InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'");
 
-    InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
+        InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+
+        InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
+
+        InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
+
+        InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
+
+        InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
+        InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
+
+        InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'");
+        InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
+
+        InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'");
+
+        InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'");
+
+        InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'");
+        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'");
+        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'");
+
+        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'");
+        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
+        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
+
+        InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'");
+
+        InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'");
+
+        InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
 
-    InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
 
-    InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
+        InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
+        InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
+        InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, "");
 
-    InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'");
-    InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'");
+        InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
+        InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
 
-    InstructionDesc[OpDPdx].operands.push(OperandId, "'P'");
+        InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'");
 
-    InstructionDesc[OpDPdy].operands.push(OperandId, "'P'");
+        InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'");
+        InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'");
+        InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'");
+        InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'");
 
-    InstructionDesc[OpFwidth].operands.push(OperandId, "'P'");
+        InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'");
+        InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
+        InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
 
-    InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'");
 
-    InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'");
+        InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'");
+        InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
 
-    InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'");
+        InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
 
-    InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'");
+        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
+        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
+        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
+        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
+        InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'");
+        InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
+        InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
 
-    InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'");
+        InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'");
+        InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'");
-    InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
 
-    InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'");
-    InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'");
+        InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
 
-    InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
 
-    InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'");
-    InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'");
-    InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'");
-    InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'");
+        InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'");
-    InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'");
+        InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
 
-    InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
+        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
+        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
+        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
+        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
 
-    InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
+        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'");
-    InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
+        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'");
-    InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'");
+        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
+        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
+        InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
 
-    InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'");
-    InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'");
-    InstructionDesc[OpLoopMerge].operands.push(OperandLoop, "");
-    InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, "");
+        InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
+        InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
+        InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
 
-    InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'");
-    InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, "");
+        InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
+        InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
+        InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'");
+        InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
+        InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
 
-    InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'");
-    InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'");
-    InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'");
-    InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'");
+        InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'");
-    InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'");
-    InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'");
+        InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
 
+        InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
 
-    InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
+        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
+        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
+        InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'");
+        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
+        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
+        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
+        InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'");
+        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
+        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
+        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
+        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
+        InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'");
-    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'");
-    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'");
-    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'");
-    InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'");
+        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
+        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
+        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
+        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
+        InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
 
-    InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'");
-    InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
+        InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
 
-    InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
+        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
+        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
+        InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
 
-    InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
 
-    InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'");
-    InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'");
+        InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'");
+        InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'");
+        InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'");
+        InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
 
-    InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupSMin].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupFMin].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupUMax].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupSMax].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
 
-    InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupFMax].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
 
-    InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
 
-    InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
 
-    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'");
-    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'");
-    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
 
-    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'");
-    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'");
-    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
 
-    InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
-    InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
 
-    InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
-    InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
 
-    InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
-    InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
-    InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'");
+        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'");
-    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'");
-    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'");
-    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'");
-    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'");
-    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'");
-    InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'");
+        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'");
-    InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'");
-    InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'");
+        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'");
-    InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'");
-    InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'");
-    InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'");
+        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'");
+        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'");
+        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'");
+        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'");
-    InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'");
-    InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'");
-    InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'");
+        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
 
-    InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'");
-    InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'");
-    InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'");
-    InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'");
+        InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
 
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'");
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'");
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'");
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'");
-    InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'");
+        InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'");
 
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'");
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'");
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'");
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'");
-    InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'");
+        InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'");
-    InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'");
+        InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
 
-    InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'");
-    InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'");
-    InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'");
-    InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'");
+        InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X");
+        InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
 
-    InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X");
+        InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
 
-    InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X");
+        InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
 
-    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID");
+        InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
 
-    InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit");
+        InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X");
+        InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
+        InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'");
+        InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
 
-    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask");
+        InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
+        InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
 
-    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset");
+        InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
 
-    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset");
+        InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
 
-    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
+        InstructionDesc[OpTraceNV].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'");
+        InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'");
+        InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'");
+        InstructionDesc[OpTraceRayKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
+        InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
 
-    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
+        InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
+        InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
+        InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
+        InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
+        InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true);
+        // Ray Query
+        InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
+        InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
 
-    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'");
+        InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
+        InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true);
+        InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
 
-    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'");
+        InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
-    InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
-    InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'");
+        InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'");
+        InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'");
+        InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'");
+        InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X");
+        InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X");
+        InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X");
+        InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X");
+        InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'");
-    InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'");
-    InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X");
+        InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'");
-    InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'");
+        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
+        InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'RayQuery'");
+        InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'");
+        InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
 
-    InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
+        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
+        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
+        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
+        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
+        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
 
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
-    InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
-    InstructionDesc[OpTraceNV].setResultAndType(false, false);
+        InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
+        InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
 
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'");
-    InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'");
-    InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false);
+        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[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'");
-    InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'");
-    InstructionDesc[OpTraceRayKHR].setResultAndType(false, false);
+        InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
+        InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
+        InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
 
-    InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
-    InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
 
-    InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
+        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
+        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
+        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
+        InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
 
-    InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
+        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
+        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
+        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
+        InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
 
-    InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
+        InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
 
-    InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
-    
-    InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
-    InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
-    InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
+        InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
+        InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
+        InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
 
-    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
-    InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");
-    InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
+        InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
 
-    InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
-    InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
+        InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
 
-    // Ray Query
-    InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
-    InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);
+        InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
 
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'");
-    InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'");
-    InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false);
+        InstructionDesc[OpTypeHitObjectNV].setResultAndType(true, false);
 
-    InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false);
+        InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'");
-    InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false);
+        InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Hint'");
+        InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Bits'");
+        InstructionDesc[OpReorderThreadWithHintNV].setResultAndType(false, false);
 
-    InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false);
+        InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Hint'");
+        InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Bits'");
+        InstructionDesc[OpReorderThreadWithHitObjectNV].setResultAndType(false, false);
 
-    InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetCurrentTimeNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetCurrentTimeNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetHitKindNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetHitKindNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetPrimitiveIndexNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetPrimitiveIndexNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetGeometryIndexNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetGeometryIndexNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetInstanceIdNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetInstanceIdNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetObjectRayDirectionNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetObjectRayDirectionNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetObjectRayOriginNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetObjectRayOriginNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetWorldRayDirectionNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetWorldRayDirectionNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetWorldRayOriginNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetWorldRayOriginNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetWorldToObjectNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetWorldToObjectNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetObjectToWorldNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetObjectToWorldNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetRayTMaxNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetRayTMaxNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetRayTMinNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetRayTMinNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectIsEmptyNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectIsEmptyNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectIsHitNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectIsHitNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectIsMissNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectIsMissNV].setResultAndType(true, true);
 
-    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'");
-    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'");
-    InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true);
+        InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObjectAttribute'");
+        InstructionDesc[OpHitObjectGetAttributesNV].setResultAndType(false, false);
 
-    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
-    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
-    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
-    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'");
-    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true);
-    InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true);
-    
-    InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
-    InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
+        InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'Payload'");
+        InstructionDesc[OpHitObjectExecuteShaderNV].setResultAndType(false, false);
 
-    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[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'InstanceId'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'PrimitiveId'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'GeometryIndex'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitKind'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject Attribute'");
+        InstructionDesc[OpHitObjectRecordHitNV].setResultAndType(false, false);
 
-    InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
-    InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
-    InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'InstanceId'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'PrimitiveId'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'GeometryIndex'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitKind'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Current Time'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject Attribute'");
+        InstructionDesc[OpHitObjectRecordHitMotionNV].setResultAndType(false, false);
 
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'InstanceId'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'PrimitiveId'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'GeometryIndex'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitKind'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'SBT Record Index'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject Attribute'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexNV].setResultAndType(false, false);
 
-    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
-    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
-    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
-    InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'InstanceId'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'PrimitiveId'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'GeometryIndex'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitKind'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'SBT Record Index'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Current Time'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject Attribute'");
+        InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].setResultAndType(false, false);
 
-    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'");
-    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'");
-    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'");
-    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true);
-    InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true);
+        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'SBT Index'");
+        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectRecordMissNV].setResultAndType(false, false);
 
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'");
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'");
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'");
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'");
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'");
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true);
-    InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true);
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'SBT Index'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Current Time'");
+        InstructionDesc[OpHitObjectRecordMissMotionNV].setResultAndType(false, false);
 
-    InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'");
-    InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'");
-    InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'");
+        InstructionDesc[OpHitObjectRecordEmptyNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectRecordEmptyNV].setResultAndType(false, false);
 
-    InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'RayFlags'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Cullmask'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Miss Index'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Payload'");
+        InstructionDesc[OpHitObjectTraceRayNV].setResultAndType(false, false);
 
-    InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false);
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'HitObject'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'RayFlags'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Cullmask'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Origin'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMin'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Direction'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMax'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'");
+        InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false);
 
-    InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'");
+        InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'");
+        InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+        InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+        InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true);
+    });
 }
 
 }; // end spv namespace
diff --git a/SPIRV/doc.h b/SPIRV/doc.h
index 2a0b28c..95aa5ce 100644
--- a/SPIRV/doc.h
+++ b/SPIRV/doc.h
@@ -190,15 +190,15 @@
 // Parameterize an enumerant
 class EnumParameters {
 public:
-    EnumParameters() : desc(0) { }
+    EnumParameters() : desc(nullptr) { }
     const char* desc;
 };
 
 // Parameterize a set of enumerants that form an enum
 class EnumDefinition : public EnumParameters {
 public:
-    EnumDefinition() : 
-        ceiling(0), bitmask(false), getName(0), enumParams(0), operandParams(0) { }
+    EnumDefinition() :
+        ceiling(0), bitmask(false), getName(nullptr), enumParams(nullptr), operandParams(nullptr) { }
     void set(int ceil, const char* (*name)(int), EnumParameters* ep, bool mask = false)
     {
         ceiling = ceil;
diff --git a/SPIRV/hex_float.h b/SPIRV/hex_float.h
index 8be8e9f..785e8af 100644
--- a/SPIRV/hex_float.h
+++ b/SPIRV/hex_float.h
@@ -23,19 +23,6 @@
 #include <limits>
 #include <sstream>
 
-#if defined(_MSC_VER) && _MSC_VER < 1800
-namespace std {
-bool isnan(double f)
-{
-  return ::_isnan(f) != 0;
-}
-bool isinf(double f)
-{
-  return ::_finite(f) == 0;
-}
-}
-#endif
-
 #include "bitutils.h"
 
 namespace spvutils {
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 0e40544..f3fb899 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -1,2533 +1,2729 @@
-// 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

+// 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, Beef
+//
+// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+// - 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
+// - Beef will use enum classes in the Specification class located in the "Spv" namespace,
+//     e.g.: Spv.Specification.SourceLanguage.GLSL
+//
+// Some tokens act like mask values, which can be OR'd together,
+// while others are mutually exclusive.  The mask-like ones have
+// "Mask" in their name, and a parallel enum that has the shift
+// 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,
+    SourceLanguageSYCL = 7,
+    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,
+    ExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
+    ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
+    ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
+    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,
+    ExecutionModeStreamingInterfaceINTEL = 6154,
+    ExecutionModeNamedBarrierCountINTEL = 6417,
+    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,
+    StorageClassTileImageEXT = 4172,
+    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,
+    StorageClassHitObjectAttributeNV = 5385,
+    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,
+    DimTileImageDataEXT = 4173,
+    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,
+    FunctionParameterAttributeRuntimeAlignedINTEL = 5940,
+    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,
+    DecorationHitObjectShaderRecordBufferNV = 5386,
+    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,
+    DecorationMathOpDSPModeINTEL = 5909,
+    DecorationAliasScopeINTEL = 5914,
+    DecorationNoAliasINTEL = 5915,
+    DecorationInitiationIntervalINTEL = 5917,
+    DecorationMaxConcurrencyINTEL = 5918,
+    DecorationPipelineEnableINTEL = 5919,
+    DecorationBufferLocationINTEL = 5921,
+    DecorationIOPipeStorageINTEL = 5944,
+    DecorationFunctionFloatingPointModeINTEL = 6080,
+    DecorationSingleElementVectorINTEL = 6085,
+    DecorationVectorComputeCallableFunctionINTEL = 6087,
+    DecorationMediaBlockIOINTEL = 6140,
+    DecorationConduitKernelArgumentINTEL = 6175,
+    DecorationRegisterMapKernelArgumentINTEL = 6176,
+    DecorationMMHostInterfaceAddressWidthINTEL = 6177,
+    DecorationMMHostInterfaceDataWidthINTEL = 6178,
+    DecorationMMHostInterfaceLatencyINTEL = 6179,
+    DecorationMMHostInterfaceReadWriteModeINTEL = 6180,
+    DecorationMMHostInterfaceMaxBurstINTEL = 6181,
+    DecorationMMHostInterfaceWaitRequestINTEL = 6182,
+    DecorationStableKernelArgumentINTEL = 6183,
+    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,
+    BuiltInCoreIDARM = 4160,
+    BuiltInCoreCountARM = 4161,
+    BuiltInCoreMaxIDARM = 4162,
+    BuiltInWarpIDARM = 4163,
+    BuiltInWarpMaxIDARM = 4164,
+    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,
+    BuiltInHitTriangleVertexPositionsKHR = 5335,
+    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,
+    LoopControlLoopCountINTELShift = 24,
+    LoopControlMaxReinvocationDelayINTELShift = 25,
+    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,
+    LoopControlLoopCountINTELMask = 0x01000000,
+    LoopControlMaxReinvocationDelayINTELMask = 0x02000000,
+};
+
+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,
+    MemoryAccessAliasScopeINTELMaskShift = 16,
+    MemoryAccessNoAliasINTELMaskShift = 17,
+    MemoryAccessMax = 0x7fffffff,
+};
+
+enum MemoryAccessMask {
+    MemoryAccessMaskNone = 0,
+    MemoryAccessVolatileMask = 0x00000001,
+    MemoryAccessAlignedMask = 0x00000002,
+    MemoryAccessNontemporalMask = 0x00000004,
+    MemoryAccessMakePointerAvailableMask = 0x00000008,
+    MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
+    MemoryAccessMakePointerVisibleMask = 0x00000010,
+    MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
+    MemoryAccessNonPrivatePointerMask = 0x00000020,
+    MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
+    MemoryAccessAliasScopeINTELMaskMask = 0x00010000,
+    MemoryAccessNoAliasINTELMaskMask = 0x00020000,
+};
+
+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,
+    CapabilityCoreBuiltinsARM = 4165,
+    CapabilityTileImageColorReadAccessEXT = 4166,
+    CapabilityTileImageDepthReadAccessEXT = 4167,
+    CapabilityTileImageStencilReadAccessEXT = 4168,
+    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,
+    CapabilityRayTracingPositionFetchKHR = 5336,
+    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,
+    CapabilityRayTracingOpacityMicromapEXT = 5381,
+    CapabilityShaderInvocationReorderNV = 5383,
+    CapabilityBindlessTextureNV = 5390,
+    CapabilityRayQueryPositionFetchKHR = 5391,
+    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,
+    CapabilityFPGADSPControlINTEL = 5908,
+    CapabilityMemoryAccessAliasingINTEL = 5910,
+    CapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
+    CapabilityFPGABufferLocationINTEL = 5920,
+    CapabilityArbitraryPrecisionFixedPointINTEL = 5922,
+    CapabilityUSMStorageClassesINTEL = 5935,
+    CapabilityRuntimeAlignedAttributeINTEL = 5939,
+    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,
+    CapabilityGroupNonUniformRotateKHR = 6026,
+    CapabilityAtomicFloat32AddEXT = 6033,
+    CapabilityAtomicFloat64AddEXT = 6034,
+    CapabilityLongConstantCompositeINTEL = 6089,
+    CapabilityOptNoneINTEL = 6094,
+    CapabilityAtomicFloat16AddEXT = 6095,
+    CapabilityDebugInfoModuleINTEL = 6114,
+    CapabilitySplitBarrierINTEL = 6141,
+    CapabilityFPGAArgumentInterfacesINTEL = 6174,
+    CapabilityGroupUniformArithmeticKHR = 6400,
+    CapabilityMax = 0x7fffffff,
+};
+
+enum RayFlagsShift {
+    RayFlagsOpaqueKHRShift = 0,
+    RayFlagsNoOpaqueKHRShift = 1,
+    RayFlagsTerminateOnFirstHitKHRShift = 2,
+    RayFlagsSkipClosestHitShaderKHRShift = 3,
+    RayFlagsCullBackFacingTrianglesKHRShift = 4,
+    RayFlagsCullFrontFacingTrianglesKHRShift = 5,
+    RayFlagsCullOpaqueKHRShift = 6,
+    RayFlagsCullNoOpaqueKHRShift = 7,
+    RayFlagsSkipTrianglesKHRShift = 8,
+    RayFlagsSkipAABBsKHRShift = 9,
+    RayFlagsForceOpacityMicromap2StateEXTShift = 10,
+    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,
+    RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
+};
+
+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,
+    OpColorAttachmentReadEXT = 4160,
+    OpDepthAttachmentReadEXT = 4161,
+    OpStencilAttachmentReadEXT = 4162,
+    OpTerminateInvocation = 4416,
+    OpSubgroupBallotKHR = 4421,
+    OpSubgroupFirstInvocationKHR = 4422,
+    OpSubgroupAllKHR = 4428,
+    OpSubgroupAnyKHR = 4429,
+    OpSubgroupAllEqualKHR = 4430,
+    OpGroupNonUniformRotateKHR = 4431,
+    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,
+    OpHitObjectRecordHitMotionNV = 5249,
+    OpHitObjectRecordHitWithIndexMotionNV = 5250,
+    OpHitObjectRecordMissMotionNV = 5251,
+    OpHitObjectGetWorldToObjectNV = 5252,
+    OpHitObjectGetObjectToWorldNV = 5253,
+    OpHitObjectGetObjectRayDirectionNV = 5254,
+    OpHitObjectGetObjectRayOriginNV = 5255,
+    OpHitObjectTraceRayMotionNV = 5256,
+    OpHitObjectGetShaderRecordBufferHandleNV = 5257,
+    OpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
+    OpHitObjectRecordEmptyNV = 5259,
+    OpHitObjectTraceRayNV = 5260,
+    OpHitObjectRecordHitNV = 5261,
+    OpHitObjectRecordHitWithIndexNV = 5262,
+    OpHitObjectRecordMissNV = 5263,
+    OpHitObjectExecuteShaderNV = 5264,
+    OpHitObjectGetCurrentTimeNV = 5265,
+    OpHitObjectGetAttributesNV = 5266,
+    OpHitObjectGetHitKindNV = 5267,
+    OpHitObjectGetPrimitiveIndexNV = 5268,
+    OpHitObjectGetGeometryIndexNV = 5269,
+    OpHitObjectGetInstanceIdNV = 5270,
+    OpHitObjectGetInstanceCustomIndexNV = 5271,
+    OpHitObjectGetWorldRayDirectionNV = 5272,
+    OpHitObjectGetWorldRayOriginNV = 5273,
+    OpHitObjectGetRayTMaxNV = 5274,
+    OpHitObjectGetRayTMinNV = 5275,
+    OpHitObjectIsEmptyNV = 5276,
+    OpHitObjectIsHitNV = 5277,
+    OpHitObjectIsMissNV = 5278,
+    OpReorderThreadWithHitObjectNV = 5279,
+    OpReorderThreadWithHintNV = 5280,
+    OpTypeHitObjectNV = 5281,
+    OpImageSampleFootprintNV = 5283,
+    OpEmitMeshTasksEXT = 5294,
+    OpSetMeshOutputsEXT = 5295,
+    OpGroupNonUniformPartitionNV = 5296,
+    OpWritePackedPrimitiveIndices4x8NV = 5299,
+    OpReportIntersectionKHR = 5334,
+    OpReportIntersectionNV = 5334,
+    OpIgnoreIntersectionNV = 5335,
+    OpTerminateRayNV = 5336,
+    OpTraceNV = 5337,
+    OpTraceMotionNV = 5338,
+    OpTraceRayMotionNV = 5339,
+    OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
+    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,
+    OpAliasDomainDeclINTEL = 5911,
+    OpAliasScopeDeclINTEL = 5912,
+    OpAliasScopeListDeclINTEL = 5913,
+    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,
+    OpControlBarrierArriveINTEL = 6142,
+    OpControlBarrierWaitINTEL = 6143,
+    OpGroupIMulKHR = 6401,
+    OpGroupFMulKHR = 6402,
+    OpGroupBitwiseAndKHR = 6403,
+    OpGroupBitwiseOrKHR = 6404,
+    OpGroupBitwiseXorKHR = 6405,
+    OpGroupLogicalAndKHR = 6406,
+    OpGroupLogicalOrKHR = 6407,
+    OpGroupLogicalXorKHR = 6408,
+    OpMax = 0x7fffffff,
+};
+
+#ifdef SPV_ENABLE_UTILITY_CODE
+#ifndef __cplusplus
+#include <stdbool.h>
+#endif
+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 OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case OpStencilAttachmentReadEXT: *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 OpGroupNonUniformRotateKHR: *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 OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break;
+    case OpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break;
+    case OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break;
+    case OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break;
+    case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
+    case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
+    case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+    case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
+    case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
+    case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
+    case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
+    case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
+    case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
+    case OpTraceNV: *hasResult = false; *hasResultType = false; break;
+    case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
+    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
+    case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
+    case 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 OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break;
+    case OpAliasScopeListDeclINTEL: *hasResult = true; *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;
+    case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
+    }
+}
+#endif /* SPV_ENABLE_UTILITY_CODE */
+
+// Overload bitwise operators for mask bit combining
+
+inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
+inline ImageOperandsMask operator&(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) & unsigned(b)); }
+inline ImageOperandsMask operator^(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline ImageOperandsMask operator~(ImageOperandsMask a) { return ImageOperandsMask(~unsigned(a)); }
+inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
+inline FPFastMathModeMask operator&(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) & unsigned(b)); }
+inline FPFastMathModeMask operator^(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) ^ unsigned(b)); }
+inline FPFastMathModeMask operator~(FPFastMathModeMask a) { return FPFastMathModeMask(~unsigned(a)); }
+inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
+inline SelectionControlMask operator&(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) & unsigned(b)); }
+inline SelectionControlMask operator^(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) ^ unsigned(b)); }
+inline SelectionControlMask operator~(SelectionControlMask a) { return SelectionControlMask(~unsigned(a)); }
+inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
+inline LoopControlMask operator&(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) & unsigned(b)); }
+inline LoopControlMask operator^(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) ^ unsigned(b)); }
+inline LoopControlMask operator~(LoopControlMask a) { return LoopControlMask(~unsigned(a)); }
+inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
+inline FunctionControlMask operator&(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) & unsigned(b)); }
+inline FunctionControlMask operator^(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) ^ unsigned(b)); }
+inline FunctionControlMask operator~(FunctionControlMask a) { return FunctionControlMask(~unsigned(a)); }
+inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
+inline MemorySemanticsMask operator&(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) & unsigned(b)); }
+inline MemorySemanticsMask operator^(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) ^ unsigned(b)); }
+inline MemorySemanticsMask operator~(MemorySemanticsMask a) { return MemorySemanticsMask(~unsigned(a)); }
+inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
+inline MemoryAccessMask operator&(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) & unsigned(b)); }
+inline MemoryAccessMask operator^(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) ^ unsigned(b)); }
+inline MemoryAccessMask operator~(MemoryAccessMask a) { return MemoryAccessMask(~unsigned(a)); }
+inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
+inline KernelProfilingInfoMask operator&(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) & unsigned(b)); }
+inline KernelProfilingInfoMask operator^(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) ^ unsigned(b)); }
+inline KernelProfilingInfoMask operator~(KernelProfilingInfoMask a) { return KernelProfilingInfoMask(~unsigned(a)); }
+inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
+inline RayFlagsMask operator&(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) & unsigned(b)); }
+inline RayFlagsMask operator^(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) ^ unsigned(b)); }
+inline RayFlagsMask operator~(RayFlagsMask a) { return RayFlagsMask(~unsigned(a)); }
+inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }
+inline FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); }
+inline FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); }
+inline FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); }
+
+}  // end namespace spv
+
+#endif  // #ifndef spirv_HPP
+
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 0969127..5cbffec 100644
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -97,6 +97,8 @@
     explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { }
     virtual ~Instruction() {}
     void addIdOperand(Id id) {
+        // ids can't be 0
+        assert(id);
         operands.push_back(id);
         idOperand.push_back(true);
     }
@@ -386,7 +388,7 @@
         if (lineInstruction != nullptr) {
             lineInstruction->dump(out);
         }
-        
+
         // OpFunction
         functionInstruction.dump(out);
 
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index d54a1df..d146063 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2020 The Khronos Group Inc.
+# Copyright (C) 2020-2023 The Khronos Group Inc.
 #
 # All rights reserved.
 #
@@ -31,7 +31,7 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-find_host_package(PythonInterp 3 REQUIRED)
+find_host_package(Python3 REQUIRED)
 
 set(GLSLANG_INTRINSIC_H          "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h")
 set(GLSLANG_INTRINSIC_PY         "${CMAKE_CURRENT_SOURCE_DIR}/../gen_extension_headers.py")
@@ -39,29 +39,18 @@
 
 add_custom_command(
     OUTPUT  ${GLSLANG_INTRINSIC_H}
-    COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_INTRINSIC_PY}"
+    COMMAND Python3::Interpreter "${GLSLANG_INTRINSIC_PY}"
             "-i" ${GLSLANG_INTRINSIC_HEADER_DIR}
             "-o" ${GLSLANG_INTRINSIC_H}
     DEPENDS ${GLSLANG_INTRINSIC_PY}
     COMMENT "Generating ${GLSLANG_INTRINSIC_H}")
 
-#add_custom_target(glslangValidator DEPENDS ${GLSLANG_INTRINSIC_H})
-
-add_library(glslang-default-resource-limits
-            ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
-            ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp)
-set_property(TARGET glslang-default-resource-limits PROPERTY FOLDER glslang)
-set_property(TARGET glslang-default-resource-limits PROPERTY POSITION_INDEPENDENT_CODE ON)
-
-target_include_directories(glslang-default-resource-limits
-                           PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-                           PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
-
 set(SOURCES StandAlone.cpp DirStackFileIncluder.h  ${GLSLANG_INTRINSIC_H})
 
-add_executable(glslangValidator ${SOURCES})
-set_property(TARGET glslangValidator PROPERTY FOLDER tools)
-glslang_set_link_args(glslangValidator)
+add_executable(glslang-standalone ${SOURCES})
+set_property(TARGET glslang-standalone PROPERTY FOLDER tools)
+set_property(TARGET glslang-standalone PROPERTY OUTPUT_NAME glslang)
+glslang_set_link_args(glslang-standalone)
 
 set(LIBRARIES
     glslang
@@ -75,18 +64,18 @@
 if(WIN32)
     set(LIBRARIES ${LIBRARIES} psapi)
 elseif(UNIX)
-    if(NOT ANDROID)
+    if(NOT ANDROID AND NOT QNX)
         set(LIBRARIES ${LIBRARIES} pthread)
     endif()
 endif()
 
-target_link_libraries(glslangValidator ${LIBRARIES})
-target_include_directories(glslangValidator PUBLIC
+target_link_libraries(glslang-standalone ${LIBRARIES})
+target_include_directories(glslang-standalone PUBLIC
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
 
 if(ENABLE_OPT)
-    target_include_directories(glslangValidator
+    target_include_directories(glslang-standalone
         PRIVATE ${spirv-tools_SOURCE_DIR}/include
     )
 endif()
@@ -104,19 +93,35 @@
 endif()
 
 if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS glslangValidator EXPORT glslang-targets)
+    install(TARGETS glslang-standalone 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.\")
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-standaloneTargets.cmake" "
+        message(WARNING \"Using `glslang-standaloneTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
 
-        if (NOT TARGET glslang::glslangValidator)
-            include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/glslang-targets.cmake\")
+        if (NOT TARGET glslang::glslang-standalone)
+            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
         endif()
 
-        add_library(glslangValidator ALIAS glslang::glslangValidator)
+        add_library(glslang-standalone ALIAS glslang::glslang-standalone)
     ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslang-standaloneTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+
+    # Create a symbolic link to glslang named glslangValidator for backwards compatibility
+    set(legacy_glslang_name "glslangValidator${CMAKE_EXECUTABLE_SUFFIX}")
+    set(link_method create_symlink)
+    if (WIN32 OR MINGW)
+        set(link_method copy_if_different)
+    endif()
+    add_custom_command(TARGET glslang-standalone
+                       POST_BUILD
+                       COMMAND ${CMAKE_COMMAND} -E ${link_method} $<TARGET_FILE_NAME:glslang-standalone> ${legacy_glslang_name}
+                       WORKING_DIRECTORY $<TARGET_FILE_DIR:glslang-standalone>)
+
+    # Create the same symlink at install time
+    install(CODE "execute_process( \
+                      COMMAND ${CMAKE_COMMAND} -E ${link_method} $<TARGET_FILE_NAME:glslang-standalone> ${legacy_glslang_name} \
+                      WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})")
 
     if(ENABLE_SPVREMAPPER)
         install(TARGETS spirv-remap EXPORT glslang-targets)
@@ -126,7 +131,7 @@
             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\")
+                include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
             endif()
 
             add_library(spirv-remap ALIAS glslang::spirv-remap)
@@ -134,18 +139,4 @@
         install(FILES "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
     endif()
 
-    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/StandAlone.cpp b/StandAlone/StandAlone.cpp
index edde81e..8a78b21 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -41,7 +41,7 @@
 #define _CRT_SECURE_NO_WARNINGS
 #endif
 
-#include "ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
 #include "Worklist.h"
 #include "DirStackFileIncluder.h"
 #include "./../glslang/Include/ShHandle.h"
@@ -149,7 +149,6 @@
 // array of unique places to leave the shader names and infologs for the asynchronous compiles
 std::vector<std::unique_ptr<glslang::TWorkItem>> WorkItems;
 
-TBuiltInResource Resources;
 std::string ConfigFile;
 
 //
@@ -158,11 +157,11 @@
 void ProcessConfigFile()
 {
     if (ConfigFile.size() == 0)
-        Resources = glslang::DefaultTBuiltInResource;
+        *GetResources() = *GetDefaultResources();
 #ifndef GLSLANG_WEB
     else {
         char* configString = ReadFileData(ConfigFile.c_str());
-        glslang::DecodeResourceLimits(&Resources,  configString);
+        DecodeResourceLimits(GetResources(),  configString);
         FreeFileData(configString);
     }
 #endif
@@ -259,6 +258,17 @@
         text.append("\n");
     }
 
+    void addText(std::string preambleText)
+    {
+        fixLine(preambleText);
+
+        Processes.push_back("preamble-text");
+        Processes.back().append(preambleText);
+
+        text.append(preambleText);
+        text.append("\n");
+    }
+
 protected:
     void fixLine(std::string& line)
     {
@@ -505,7 +515,7 @@
 
     if (set) {
         errno = 0;
-        int setVal = ::strtol(argv[curArg], NULL, 10);
+        int setVal = ::strtol(argv[curArg], nullptr, 10);
         if (errno || setVal < 0) {
             printf("%s: invalid set\n", argv[curArg]);
             usage();
@@ -517,7 +527,7 @@
 
     if (binding) {
         errno = 0;
-        int bindingVal = ::strtol(argv[curArg], NULL, 10);
+        int bindingVal = ::strtol(argv[curArg], nullptr, 10);
         if (errno || bindingVal < 0) {
             printf("%s: invalid binding\n", argv[curArg]);
             usage();
@@ -595,12 +605,12 @@
     const auto getUniformOverride = [getStringOperand]() {
         const char *arg = getStringOperand("-u<name>:<location>");
         const char *split = strchr(arg, ':');
-        if (split == NULL) {
+        if (split == nullptr) {
             printf("%s: missing location\n", arg);
             exit(EFailUsage);
         }
         errno = 0;
-        int location = ::strtol(split + 1, NULL, 10);
+        int location = ::strtol(split + 1, nullptr, 10);
         if (errno) {
             printf("%s: invalid location\n", arg);
             exit(EFailUsage);
@@ -627,7 +637,7 @@
                     } else if (lowerword == "uniform-base") {
                         if (argc <= 1)
                             Error("no <base> provided", lowerword.c_str());
-                        uniformBase = ::strtol(argv[1], NULL, 10);
+                        uniformBase = ::strtol(argv[1], nullptr, 10);
                         bumpArg();
                         break;
                     } else if (lowerword == "client") {
@@ -715,7 +725,7 @@
                         HlslDxPositionW = true;
                     } else if (lowerword == "enhanced-msgs") {
                         EnhancedMsgs = true;
-                    } else if (lowerword == "auto-sampled-textures") { 
+                    } else if (lowerword == "auto-sampled-textures") {
                         autoSampledTextures = true;
                     } else if (lowerword == "invert-y" ||  // synonyms
                                lowerword == "iy") {
@@ -728,6 +738,13 @@
                     } else if (lowerword == "no-storage-format" || // synonyms
                                lowerword == "nsf") {
                         Options |= EOptionNoStorageFormat;
+                    } else if (lowerword == "preamble-text" ||
+                               lowerword == "p") {
+                        if (argc > 1)
+                            UserPreamble.addText(argv[1]);
+                        else
+                            Error("expects <text>", argv[0]);
+                        bumpArg();
                     } else if (lowerword == "relaxed-errors") {
                         Options |= EOptionRelaxedErrors;
                     } else if (lowerword == "reflect-strict-array-suffix") {
@@ -927,6 +944,9 @@
                 else
                     Error("unknown -O option");
                 break;
+            case 'P':
+                UserPreamble.addText(getStringOperand("-P<text>"));
+                break;
             case 'R':
                 VulkanRulesRelaxed = true;
                 break;
@@ -1162,7 +1182,7 @@
     } else {
         while (worklist.remove(workItem)) {
             ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options);
-            if (compiler == 0)
+            if (compiler == nullptr)
                 return;
 
             CompileFile(workItem->name.c_str(), compiler);
@@ -1298,7 +1318,7 @@
             sources.push_back(compUnit.fileNameList[i]);
         }
         glslang::TShader* shader = new glslang::TShader(compUnit.stage);
-        shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, compUnit.count);
+        shader->setStringsWithLengthsAndNames(compUnit.text, nullptr, compUnit.fileNameList, compUnit.count);
         if (entryPointName)
             shader->setEntryPoint(entryPointName);
         if (sourceEntryPointName) {
@@ -1417,7 +1437,7 @@
 #ifndef GLSLANG_WEB
         if (Options & EOptionOutputPreprocessed) {
             std::string str;
-            if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) {
+            if (shader->preprocess(GetResources(), defaultVersion, ENoProfile, false, false, messages, &str, includer)) {
                 PutsIfNonEmpty(str.c_str());
             } else {
                 CompileFailed = true;
@@ -1428,7 +1448,7 @@
         }
 #endif
 
-        if (! shader->parse(&Resources, defaultVersion, false, messages, includer))
+        if (! shader->parse(GetResources(), defaultVersion, false, messages, includer))
             CompileFailed = true;
 
         program.addShader(shader);
@@ -1506,9 +1526,11 @@
                     if (! (Options & EOptionMemoryLeakMode)) {
                         printf("%s", logger.getAllMessages().c_str());
                         if (Options & EOptionOutputHexadecimal) {
-                            glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage), variableName);
+                            if (!glslang::OutputSpvHex(spirv, GetBinaryName((EShLanguage)stage), variableName))
+                              exit(EFailUsage);
                         } else {
-                            glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage));
+                            if (!glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage)))
+                              exit(EFailUsage);
                         }
 
                         outputFiles.push_back(GetBinaryName((EShLanguage)stage));
@@ -1612,7 +1634,7 @@
 
 #ifndef GLSLANG_WEB
     if (Options & EOptionDumpConfig) {
-        printf("%s", glslang::GetDefaultTBuiltInResourceString().c_str());
+        printf("%s", GetDefaultTBuiltInResourceString().c_str());
         if (workList.empty())
             return ESuccess;
     }
@@ -1833,12 +1855,12 @@
     SetMessageOptions(messages);
 
     if (UserPreamble.isSet())
-        Error("-D and -U options require -l (linking)\n");
+        Error("-D, -U and -P options require -l (linking)\n");
 
     for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
         for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
             // ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
-            ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
+            ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, GetResources(), Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
             // const char* multi[12] = { "# ve", "rsion", " 300 e", "s", "\n#err",
             //                         "or should be l", "ine 1", "string 5\n", "float glo", "bal",
             //                         ";\n#error should be line 2\n void main() {", "global = 2.3;}" };
@@ -1862,7 +1884,7 @@
 //
 void usage()
 {
-    printf("Usage: glslangValidator [option]... [file]...\n"
+    printf("Usage: glslang [option]... [file]...\n"
            "\n"
            "'file' can end in .<stage> for auto-stage classification, where <stage> is:\n"
            "    .conf   to provide a config file that replaces the default configuration\n"
@@ -1903,6 +1925,9 @@
            "              is searched first, followed by left-to-right order of -I\n"
            "  -Od         disables optimization; may cause illegal SPIR-V for HLSL\n"
            "  -Os         optimizes SPIR-V to minimize size\n"
+           "  -P<text> | --preamble-text <text> | --P <text>\n"
+           "              inject custom preamble text, which is treated as if it\n"
+           "              appeared immediately after the version declaration (if any).\n"
            "  -R          use relaxed verification rules for generating Vulkan SPIR-V,\n"
            "              allowing the use of default uniforms, atomic_uints, and\n"
            "              gl_VertexID and gl_InstanceID keywords.\n"
@@ -1950,7 +1975,7 @@
            "                                    without explicit bindings\n"
            "  --auto-map-locations | --aml      automatically locate input/output lacking\n"
            "                                    'location' (fragile, not cross stage)\n"
-           "  --auto-sampled-textures           Removes sampler variables and converts\n" 
+           "  --auto-sampled-textures           Removes sampler variables and converts\n"
            "                                    existing textures to sampled textures\n"
            "  --client {vulkan<ver>|opengl<ver>} see -V and -G\n"
            "  --depfile <file>                  writes depfile for build systems\n"
@@ -2064,8 +2089,7 @@
            "  --variable-name <name>\n"
            "  --vn <name>                       creates a C header file that contains a\n"
            "                                    uint32_t array named <name>\n"
-           "                                    initialized with the shader binary code\n"
-           );
+           "                                    initialized with the shader binary code\n");
 
     exit(EFailUsage);
 }
diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp
index 15c3ac5..c54cbb9 100644
--- a/StandAlone/spirv-remap.cpp
+++ b/StandAlone/spirv-remap.cpp
@@ -157,7 +157,7 @@
     }
 
     // Print helpful usage message to stdout, and exit
-    void usage(const char* const name, const char* const msg = 0)
+    void usage(const char* const name, const char* const msg = nullptr)
     {
         if (msg)
             std::cout << msg << std::endl << std::endl;
@@ -245,7 +245,7 @@
                 verbosity = 1;
 
                 if (a < argc) {
-                    char* end_ptr = 0;
+                    char* end_ptr = nullptr;
                     int verb = ::strtol(argv[a], &end_ptr, 10);
                     // If we have not read to the end of the string or
                     // the string contained no elements, then we do not want to
@@ -352,13 +352,11 @@
     int                      opts;
     int                      verbosity;
 
-#ifdef use_cpp11
     // handle errors by exiting
     spv::spirvbin_t::registerErrorHandler(errHandler);
 
     // Log messages to std::cout
     spv::spirvbin_t::registerLogHandler(logHandler);
-#endif
 
     if (argc < 2)
         usage(argv[0]);
diff --git a/Test/GL_ARB_bindless_texture.frag b/Test/GL_ARB_bindless_texture.frag
new file mode 100644
index 0000000..58c8359
--- /dev/null
+++ b/Test/GL_ARB_bindless_texture.frag
@@ -0,0 +1,50 @@
+#version 460 compatibility
+
+#extension GL_ARB_bindless_texture: require
+
+#if !defined GL_ARB_bindless_texture
+#  error GL_ARB_bindless_texture is not defined
+#elif GL_ARB_bindless_texture != 1
+#  error GL_ARB_bindless_texture is not equal to 1
+#endif
+
+// Valid usage cases
+layout(bindless_sampler) uniform sampler2D s0;      //  case0:  bindless layout
+in sampler2D s1;                                    //  case1:  sampler as an input
+uniform uvec2 s2;                                   //  case2:  uvec2 as sampler constructor
+uniform ivec2 s3;                                   //  case3:  ivec2 as sampler constructor
+uniform int index;
+in sampler2D s4[2][3];                              //  case4:  sampler arrays of arrays
+uniform BB {sampler2D s5;} bbs5[2];                 //  case5:  uniform block member as a sampler
+in samplerBuffer s6;                                //  case6:  samplerBuffer input
+uniform UBO9 {samplerBuffer s7;};                   //  case7:  samplerBuffer as an uniform block member
+buffer SSBO10 {samplerBuffer s8;};                  //  case8:  samplerBuffer as an ssbo member
+layout(rgba8, bindless_image) in image2D i9;        //  case9:  bindless image as an input
+
+
+uniform vec2 coord;                                 //  bindless coord 2-D
+uniform int icoord;                                 //  bindless coord 1-D
+out vec4 color0;
+out vec4 color1;
+out vec4 color2;
+out vec4 color3;
+out vec4 color4;
+out vec4 color5;
+out vec4 color6;
+out vec4 color7;
+out vec4 color8;
+out vec4 color9;
+
+void main()
+{
+    color0 = texture(s0, coord);
+    color1 = texture(s1, coord);
+    color2 = texture(sampler2D(s2), coord);
+    color3 = texture(sampler2D(s3), coord);
+    color4 = texture(s4[index][index], coord);
+    color5 = texture(bbs5[index].s5, coord);
+    color6 = texelFetch(s6, icoord);
+    color7 = texelFetch(s7, icoord);
+    color8 = texelFetch(s8, icoord);
+    color9 = imageLoad(i9, ivec2(0,0));
+}
\ No newline at end of file
diff --git a/Test/baseResults/120.vert.out b/Test/baseResults/120.vert.out
index 6c42b75..fcfffe9 100644
--- a/Test/baseResults/120.vert.out
+++ b/Test/baseResults/120.vert.out
@@ -46,6 +46,7 @@
 ERROR: 0:111: 'overloadE' : no matching overloaded function found 
 ERROR: 0:117: 'overloadF' : no matching overloaded function found 
 ERROR: 0:121: 'gl_TexCoord array size' : must be less than or equal to gl_MaxTextureCoords (32)
+ERROR: 0:154: 'non-float shader input/output' : not supported for this version or the enabled extensions 
 ERROR: 0:165: 'switch' : Reserved word. 
 ERROR: 0:171: 'default' : Reserved word. 
 ERROR: 0:165: 'switch statements' : not supported for this version or the enabled extensions 
@@ -80,7 +81,7 @@
 ERROR: 0:200: 'token pasting (##)' : not supported for this version or the enabled extensions 
 ERROR: 0:203: 'token pasting (##)' : not supported for this version or the enabled extensions 
 ERROR: 0:205: '' :  syntax error, unexpected IDENTIFIER
-ERROR: 81 compilation errors.  No code generated.
+ERROR: 82 compilation errors.  No code generated.
 
 
 Shader version: 120
diff --git a/Test/baseResults/300layout.vert.out b/Test/baseResults/300layout.vert.out
index 527425b..e1ec452 100644
--- a/Test/baseResults/300layout.vert.out
+++ b/Test/baseResults/300layout.vert.out
@@ -1,6 +1,6 @@
 300layout.vert
 ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es
-ERROR: 0:8: 'in' : cannot be a structure or array 
+ERROR: 0:8: 'in' : cannot be a structure 
 ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES 
 ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es
 ERROR: 0:8: 'location' : overlapping use of location 10
diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out
index c7ff728..7ea1926 100644
--- a/Test/baseResults/440.frag.out
+++ b/Test/baseResults/440.frag.out
@@ -1,7 +1,7 @@
 440.frag
 ERROR: 0:11: 'location' : overlapping use of location 4
 ERROR: 0:13: 'component' : type overflows the available 4 components 
-ERROR: 0:22: 'location' : fragment outputs sharing the same location must be the same basic type 30
+ERROR: 0:22: 'location' : fragment outputs or tileImageEXTs sharing the same location 30 must be the same basic type
 ERROR: 0:24: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 ERROR: 0:25: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 ERROR: 0:26: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
@@ -43,11 +43,11 @@
 ERROR: 0:63: 'layout' : offset/align can only be used on a uniform or buffer 
 ERROR: 0:84: 'align' : must be a power of 2 
 ERROR: 0:83: 'offset' : cannot lie in previous members 
-ERROR: 0:85: 'offset' : must be a multiple of the member's alignment 
+ERROR: 0:85: 'offset' : must be a multiple of the member's alignment (layout offset = 68 | member alignment = 8)
 ERROR: 0:103: 'align' : must be a power of 2 
 ERROR: 0:105: 'align' : must be a power of 2 
 ERROR: 0:102: 'offset' : cannot lie in previous members 
-ERROR: 0:104: 'offset' : must be a multiple of the member's alignment 
+ERROR: 0:104: 'offset' : must be a multiple of the member's alignment (layout offset = 68 | member alignment = 8)
 ERROR: 49 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/GL_ARB_bindless_texture.frag.out b/Test/baseResults/GL_ARB_bindless_texture.frag.out
new file mode 100644
index 0000000..3f902c9
--- /dev/null
+++ b/Test/baseResults/GL_ARB_bindless_texture.frag.out
@@ -0,0 +1,205 @@
+GL_ARB_bindless_texture.frag
+Shader version: 460
+Requested GL_ARB_bindless_texture
+0:? Sequence
+0:38  Function Definition: main( ( global void)
+0:38    Function Parameters: 
+0:40    Sequence
+0:40      move second child to first child ( temp 4-component vector of float)
+0:40        'color0' ( out 4-component vector of float)
+0:40        texture ( global 4-component vector of float)
+0:40          's0' ( uniform sampler2D)
+0:40          'coord' ( uniform 2-component vector of float)
+0:41      move second child to first child ( temp 4-component vector of float)
+0:41        'color1' ( out 4-component vector of float)
+0:41        texture ( global 4-component vector of float)
+0:41          's1' ( smooth in sampler2D)
+0:41          'coord' ( uniform 2-component vector of float)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'color2' ( out 4-component vector of float)
+0:42        texture ( global 4-component vector of float)
+0:42          packUint2x32 ( temp sampler2D)
+0:42            's2' ( uniform 2-component vector of uint)
+0:42          'coord' ( uniform 2-component vector of float)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'color3' ( out 4-component vector of float)
+0:43        texture ( global 4-component vector of float)
+0:43          packUint2x32 ( temp sampler2D)
+0:43            's3' ( uniform 2-component vector of int)
+0:43          'coord' ( uniform 2-component vector of float)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        'color4' ( out 4-component vector of float)
+0:44        texture ( global 4-component vector of float)
+0:44          indirect index ( smooth temp sampler2D)
+0:44            indirect index ( smooth temp 3-element array of sampler2D)
+0:44              's4' ( smooth in 2-element array of 3-element array of sampler2D)
+0:44              'index' ( uniform int)
+0:44            'index' ( uniform int)
+0:44          'coord' ( uniform 2-component vector of float)
+0:45      move second child to first child ( temp 4-component vector of float)
+0:45        'color5' ( out 4-component vector of float)
+0:45        texture ( global 4-component vector of float)
+0:45          s5: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform sampler2D)
+0:45            indirect index (layout( column_major shared) temp block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5})
+0:45              'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5})
+0:45              'index' ( uniform int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          'coord' ( uniform 2-component vector of float)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        'color6' ( out 4-component vector of float)
+0:46        textureFetch ( global 4-component vector of float)
+0:46          's6' ( smooth in samplerBuffer)
+0:46          'icoord' ( uniform int)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        'color7' ( out 4-component vector of float)
+0:47        textureFetch ( global 4-component vector of float)
+0:47          s7: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform samplerBuffer)
+0:47            'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7})
+0:47            Constant:
+0:47              0 (const uint)
+0:47          'icoord' ( uniform int)
+0:48      move second child to first child ( temp 4-component vector of float)
+0:48        'color8' ( out 4-component vector of float)
+0:48        textureFetch ( global 4-component vector of float)
+0:48          s8: direct index for structure (layout( column_major shared layoutBindlessSampler) buffer samplerBuffer)
+0:48            'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8})
+0:48            Constant:
+0:48              0 (const uint)
+0:48          'icoord' ( uniform int)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        'color9' ( out 4-component vector of float)
+0:49        imageLoad ( global 4-component vector of float)
+0:49          'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D)
+0:49          Constant:
+0:49            0 (const int)
+0:49            0 (const int)
+0:?   Linker Objects
+0:?     's0' ( uniform sampler2D)
+0:?     's1' ( smooth in sampler2D)
+0:?     's2' ( uniform 2-component vector of uint)
+0:?     's3' ( uniform 2-component vector of int)
+0:?     'index' ( uniform int)
+0:?     's4' ( smooth in 2-element array of 3-element array of sampler2D)
+0:?     'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5})
+0:?     's6' ( smooth in samplerBuffer)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7})
+0:?     'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8})
+0:?     'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D)
+0:?     'coord' ( uniform 2-component vector of float)
+0:?     'icoord' ( uniform int)
+0:?     'color0' ( out 4-component vector of float)
+0:?     'color1' ( out 4-component vector of float)
+0:?     'color2' ( out 4-component vector of float)
+0:?     'color3' ( out 4-component vector of float)
+0:?     'color4' ( out 4-component vector of float)
+0:?     'color5' ( out 4-component vector of float)
+0:?     'color6' ( out 4-component vector of float)
+0:?     'color7' ( out 4-component vector of float)
+0:?     'color8' ( out 4-component vector of float)
+0:?     'color9' ( out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 460
+Requested GL_ARB_bindless_texture
+0:? Sequence
+0:38  Function Definition: main( ( global void)
+0:38    Function Parameters: 
+0:40    Sequence
+0:40      move second child to first child ( temp 4-component vector of float)
+0:40        'color0' ( out 4-component vector of float)
+0:40        texture ( global 4-component vector of float)
+0:40          's0' ( uniform sampler2D)
+0:40          'coord' ( uniform 2-component vector of float)
+0:41      move second child to first child ( temp 4-component vector of float)
+0:41        'color1' ( out 4-component vector of float)
+0:41        texture ( global 4-component vector of float)
+0:41          's1' ( smooth in sampler2D)
+0:41          'coord' ( uniform 2-component vector of float)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'color2' ( out 4-component vector of float)
+0:42        texture ( global 4-component vector of float)
+0:42          packUint2x32 ( temp sampler2D)
+0:42            's2' ( uniform 2-component vector of uint)
+0:42          'coord' ( uniform 2-component vector of float)
+0:43      move second child to first child ( temp 4-component vector of float)
+0:43        'color3' ( out 4-component vector of float)
+0:43        texture ( global 4-component vector of float)
+0:43          packUint2x32 ( temp sampler2D)
+0:43            's3' ( uniform 2-component vector of int)
+0:43          'coord' ( uniform 2-component vector of float)
+0:44      move second child to first child ( temp 4-component vector of float)
+0:44        'color4' ( out 4-component vector of float)
+0:44        texture ( global 4-component vector of float)
+0:44          indirect index ( smooth temp sampler2D)
+0:44            indirect index ( smooth temp 3-element array of sampler2D)
+0:44              's4' ( smooth in 2-element array of 3-element array of sampler2D)
+0:44              'index' ( uniform int)
+0:44            'index' ( uniform int)
+0:44          'coord' ( uniform 2-component vector of float)
+0:45      move second child to first child ( temp 4-component vector of float)
+0:45        'color5' ( out 4-component vector of float)
+0:45        texture ( global 4-component vector of float)
+0:45          s5: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform sampler2D)
+0:45            indirect index (layout( column_major shared) temp block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5})
+0:45              'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5})
+0:45              'index' ( uniform int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          'coord' ( uniform 2-component vector of float)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        'color6' ( out 4-component vector of float)
+0:46        textureFetch ( global 4-component vector of float)
+0:46          's6' ( smooth in samplerBuffer)
+0:46          'icoord' ( uniform int)
+0:47      move second child to first child ( temp 4-component vector of float)
+0:47        'color7' ( out 4-component vector of float)
+0:47        textureFetch ( global 4-component vector of float)
+0:47          s7: direct index for structure (layout( column_major shared layoutBindlessSampler) uniform samplerBuffer)
+0:47            'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7})
+0:47            Constant:
+0:47              0 (const uint)
+0:47          'icoord' ( uniform int)
+0:48      move second child to first child ( temp 4-component vector of float)
+0:48        'color8' ( out 4-component vector of float)
+0:48        textureFetch ( global 4-component vector of float)
+0:48          s8: direct index for structure (layout( column_major shared layoutBindlessSampler) buffer samplerBuffer)
+0:48            'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8})
+0:48            Constant:
+0:48              0 (const uint)
+0:48          'icoord' ( uniform int)
+0:49      move second child to first child ( temp 4-component vector of float)
+0:49        'color9' ( out 4-component vector of float)
+0:49        imageLoad ( global 4-component vector of float)
+0:49          'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D)
+0:49          Constant:
+0:49            0 (const int)
+0:49            0 (const int)
+0:?   Linker Objects
+0:?     's0' ( uniform sampler2D)
+0:?     's1' ( smooth in sampler2D)
+0:?     's2' ( uniform 2-component vector of uint)
+0:?     's3' ( uniform 2-component vector of int)
+0:?     'index' ( uniform int)
+0:?     's4' ( smooth in 2-element array of 3-element array of sampler2D)
+0:?     'bbs5' (layout( column_major shared) uniform 2-element array of block{layout( column_major shared layoutBindlessSampler) uniform sampler2D s5})
+0:?     's6' ( smooth in samplerBuffer)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared layoutBindlessSampler) uniform samplerBuffer s7})
+0:?     'anon@1' (layout( column_major shared) buffer block{layout( column_major shared layoutBindlessSampler) buffer samplerBuffer s8})
+0:?     'i9' (layout( rgba8 layoutBindlessImage) smooth in image2D)
+0:?     'coord' ( uniform 2-component vector of float)
+0:?     'icoord' ( uniform int)
+0:?     'color0' ( out 4-component vector of float)
+0:?     'color1' ( out 4-component vector of float)
+0:?     'color2' ( out 4-component vector of float)
+0:?     'color3' ( out 4-component vector of float)
+0:?     'color4' ( out 4-component vector of float)
+0:?     'color5' ( out 4-component vector of float)
+0:?     'color6' ( out 4-component vector of float)
+0:?     'color7' ( out 4-component vector of float)
+0:?     'color8' ( out 4-component vector of float)
+0:?     'color9' ( out 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.-P.frag.out b/Test/baseResults/glsl.-P.frag.out
new file mode 100644
index 0000000..27d8965
--- /dev/null
+++ b/Test/baseResults/glsl.-P.frag.out
@@ -0,0 +1,35 @@
+glsl.-P.frag
+Shader version: 450
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:19    Sequence
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'color' (layout( location=0) out 4-component vector of float)
+0:19        Constant:
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:19    Sequence
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'color' (layout( location=0) out 4-component vector of float)
+0:19        Constant:
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:19          1.000000
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.-P.function.frag.out b/Test/baseResults/glsl.-P.function.frag.out
new file mode 100644
index 0000000..b753cd1
--- /dev/null
+++ b/Test/baseResults/glsl.-P.function.frag.out
@@ -0,0 +1,45 @@
+glsl.-P.function.frag
+Shader version: 450
+0:? Sequence
+-1:1  Function Definition: getColor( ( global 4-component vector of float)
+-1:1    Function Parameters: 
+-1:1    Sequence
+-1:1      Branch: Return with expression
+-1:1        Constant:
+-1:1          1.000000
+-1:1          1.000000
+-1:1          1.000000
+-1:1          1.000000
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:7    Sequence
+0:7      move second child to first child ( temp 4-component vector of float)
+0:7        'color' (layout( location=0) out 4-component vector of float)
+0:7        Function Call: getColor( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+0:? Sequence
+-1:1  Function Definition: getColor( ( global 4-component vector of float)
+-1:1    Function Parameters: 
+-1:1    Sequence
+-1:1      Branch: Return with expression
+-1:1        Constant:
+-1:1          1.000000
+-1:1          1.000000
+-1:1          1.000000
+-1:1          1.000000
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:7    Sequence
+0:7      move second child to first child ( temp 4-component vector of float)
+0:7        'color' (layout( location=0) out 4-component vector of float)
+0:7        Function Call: getColor( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
diff --git a/Test/baseResults/glsl.-P.include.frag.out b/Test/baseResults/glsl.-P.include.frag.out
new file mode 100644
index 0000000..1ac63f5
--- /dev/null
+++ b/Test/baseResults/glsl.-P.include.frag.out
@@ -0,0 +1,49 @@
+glsl.-P.include.frag
+Shader version: 450
+Requested GL_GOOGLE_cpp_style_line_directive
+Requested GL_GOOGLE_include_directive
+0:? Sequence
+0:1  Function Definition: getColor( ( global 4-component vector of float)
+0:1    Function Parameters: 
+0:3    Sequence
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          1.000000
+0:3          1.000000
+0:3          1.000000
+0:3          1.000000
+0:7  Function Definition: main( ( global void)
+0:7    Function Parameters: 
+0:9    Sequence
+0:9      move second child to first child ( temp 4-component vector of float)
+0:9        'color' (layout( location=0) out 4-component vector of float)
+0:9        Function Call: getColor( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_GOOGLE_cpp_style_line_directive
+Requested GL_GOOGLE_include_directive
+0:? Sequence
+0:1  Function Definition: getColor( ( global 4-component vector of float)
+0:1    Function Parameters: 
+0:3    Sequence
+0:3      Branch: Return with expression
+0:3        Constant:
+0:3          1.000000
+0:3          1.000000
+0:3          1.000000
+0:3          1.000000
+0:7  Function Definition: main( ( global void)
+0:7    Function Parameters: 
+0:9    Sequence
+0:9      move second child to first child ( temp 4-component vector of float)
+0:9        'color' (layout( location=0) out 4-component vector of float)
+0:9        Function Call: getColor( ( global 4-component vector of float)
+0:?   Linker Objects
+0:?     'color' (layout( location=0) out 4-component vector of float)
+
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index e160681..47c7877 100644
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -216,33 +216,98 @@
 0:39            Convert int to float ( temp float)
 0:39              'd' ( temp int)
 0:39            'input' ( in 4-component vector of float)
-0:41      Branch: Return with expression
-0:40        add ( temp 4-component vector of float)
-0:40          add ( temp 4-component vector of float)
-0:40            add ( temp 4-component vector of float)
-0:40              add ( temp 4-component vector of float)
-0:40                vector-scale ( temp 4-component vector of float)
-0:40                  Convert int to float ( temp float)
-0:40                    'e' ( temp int)
-0:40                  'ret' ( temp 4-component vector of float)
-0:40                'f' ( temp 4-component vector of float)
-0:40              Function Call: vectorCond( ( temp 4-component vector of float)
-0:40            Function Call: scalarCond( ( temp 4-component vector of float)
-0:41          Construct vec4 ( temp 4-component vector of float)
-0:41            Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:40      Sequence
+0:40        move second child to first child ( temp uint)
+0:40          'g' ( temp uint)
+0:40          Test condition and select ( temp uint): no shortcircuit
+0:40            Condition
+0:40            Compare Greater Than ( temp bool)
+0:40              Convert int to float ( temp float)
+0:40                'd' ( temp int)
+0:40              Constant:
+0:40                0.000000
+0:40            true case
+0:40            Constant:
+0:40              21 (const uint)
+0:40            false case
+0:40            Constant:
+0:40              0 (const uint)
+0:41      Sequence
+0:41        move second child to first child ( temp uint)
+0:41          'h' ( temp uint)
+0:41          Test condition and select ( temp uint): no shortcircuit
+0:41            Condition
+0:41            Compare Greater Than ( temp bool)
+0:41              Convert uint to float ( temp float)
+0:41                'g' ( temp uint)
 0:41              Constant:
-0:41                true (const bool)
-0:41                false (const bool)
-0:41              Constant:
-0:41                1.000000
-0:41                2.000000
-0:41              Constant:
-0:41                3.000000
-0:41                4.000000
+0:41                0.000000
+0:41            true case
 0:41            Constant:
-0:41              10.000000
+0:41              63 (const uint)
+0:41            false case
 0:41            Constant:
-0:41              10.000000
+0:41              0 (const uint)
+0:42      Sequence
+0:42        move second child to first child ( temp uint)
+0:42          'i' ( temp uint)
+0:42          Test condition and select ( temp uint): no shortcircuit
+0:42            Condition
+0:42            Compare Greater Than ( temp bool)
+0:42              Convert uint to float ( temp float)
+0:42                'h' ( temp uint)
+0:42              Constant:
+0:42                0.000000
+0:42            true case
+0:42            Constant:
+0:42              5 (const uint)
+0:42            false case
+0:42            Constant:
+0:42              1 (const uint)
+0:43      Sequence
+0:43        move second child to first child ( temp uint)
+0:43          'j' ( temp uint)
+0:43          Convert int to uint ( temp uint)
+0:43            Test condition and select ( temp int): no shortcircuit
+0:43              Condition
+0:43              Compare Greater Than ( temp bool)
+0:43                Convert uint to float ( temp float)
+0:43                  'i' ( temp uint)
+0:43                Constant:
+0:43                  0.000000
+0:43              true case
+0:43              Constant:
+0:43                43981 (const int)
+0:43              false case
+0:43              Constant:
+0:43                48346 (const int)
+0:45      Branch: Return with expression
+0:44        add ( temp 4-component vector of float)
+0:44          add ( temp 4-component vector of float)
+0:44            add ( temp 4-component vector of float)
+0:44              add ( temp 4-component vector of float)
+0:44                vector-scale ( temp 4-component vector of float)
+0:44                  Convert int to float ( temp float)
+0:44                    'e' ( temp int)
+0:44                  'ret' ( temp 4-component vector of float)
+0:44                'f' ( temp 4-component vector of float)
+0:44              Function Call: vectorCond( ( temp 4-component vector of float)
+0:44            Function Call: scalarCond( ( temp 4-component vector of float)
+0:45          Construct vec4 ( temp 4-component vector of float)
+0:45            Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:45              Constant:
+0:45                true (const bool)
+0:45                false (const bool)
+0:45              Constant:
+0:45                1.000000
+0:45                2.000000
+0:45              Constant:
+0:45                3.000000
+0:45                4.000000
+0:45            Constant:
+0:45              10.000000
+0:45            Constant:
+0:45              10.000000
 0:27  Function Definition: PixelShaderFunction( ( temp void)
 0:27    Function Parameters: 
 0:?     Sequence
@@ -479,33 +544,98 @@
 0:39            Convert int to float ( temp float)
 0:39              'd' ( temp int)
 0:39            'input' ( in 4-component vector of float)
-0:41      Branch: Return with expression
-0:40        add ( temp 4-component vector of float)
-0:40          add ( temp 4-component vector of float)
-0:40            add ( temp 4-component vector of float)
-0:40              add ( temp 4-component vector of float)
-0:40                vector-scale ( temp 4-component vector of float)
-0:40                  Convert int to float ( temp float)
-0:40                    'e' ( temp int)
-0:40                  'ret' ( temp 4-component vector of float)
-0:40                'f' ( temp 4-component vector of float)
-0:40              Function Call: vectorCond( ( temp 4-component vector of float)
-0:40            Function Call: scalarCond( ( temp 4-component vector of float)
-0:41          Construct vec4 ( temp 4-component vector of float)
-0:41            Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:40      Sequence
+0:40        move second child to first child ( temp uint)
+0:40          'g' ( temp uint)
+0:40          Test condition and select ( temp uint): no shortcircuit
+0:40            Condition
+0:40            Compare Greater Than ( temp bool)
+0:40              Convert int to float ( temp float)
+0:40                'd' ( temp int)
+0:40              Constant:
+0:40                0.000000
+0:40            true case
+0:40            Constant:
+0:40              21 (const uint)
+0:40            false case
+0:40            Constant:
+0:40              0 (const uint)
+0:41      Sequence
+0:41        move second child to first child ( temp uint)
+0:41          'h' ( temp uint)
+0:41          Test condition and select ( temp uint): no shortcircuit
+0:41            Condition
+0:41            Compare Greater Than ( temp bool)
+0:41              Convert uint to float ( temp float)
+0:41                'g' ( temp uint)
 0:41              Constant:
-0:41                true (const bool)
-0:41                false (const bool)
-0:41              Constant:
-0:41                1.000000
-0:41                2.000000
-0:41              Constant:
-0:41                3.000000
-0:41                4.000000
+0:41                0.000000
+0:41            true case
 0:41            Constant:
-0:41              10.000000
+0:41              63 (const uint)
+0:41            false case
 0:41            Constant:
-0:41              10.000000
+0:41              0 (const uint)
+0:42      Sequence
+0:42        move second child to first child ( temp uint)
+0:42          'i' ( temp uint)
+0:42          Test condition and select ( temp uint): no shortcircuit
+0:42            Condition
+0:42            Compare Greater Than ( temp bool)
+0:42              Convert uint to float ( temp float)
+0:42                'h' ( temp uint)
+0:42              Constant:
+0:42                0.000000
+0:42            true case
+0:42            Constant:
+0:42              5 (const uint)
+0:42            false case
+0:42            Constant:
+0:42              1 (const uint)
+0:43      Sequence
+0:43        move second child to first child ( temp uint)
+0:43          'j' ( temp uint)
+0:43          Convert int to uint ( temp uint)
+0:43            Test condition and select ( temp int): no shortcircuit
+0:43              Condition
+0:43              Compare Greater Than ( temp bool)
+0:43                Convert uint to float ( temp float)
+0:43                  'i' ( temp uint)
+0:43                Constant:
+0:43                  0.000000
+0:43              true case
+0:43              Constant:
+0:43                43981 (const int)
+0:43              false case
+0:43              Constant:
+0:43                48346 (const int)
+0:45      Branch: Return with expression
+0:44        add ( temp 4-component vector of float)
+0:44          add ( temp 4-component vector of float)
+0:44            add ( temp 4-component vector of float)
+0:44              add ( temp 4-component vector of float)
+0:44                vector-scale ( temp 4-component vector of float)
+0:44                  Convert int to float ( temp float)
+0:44                    'e' ( temp int)
+0:44                  'ret' ( temp 4-component vector of float)
+0:44                'f' ( temp 4-component vector of float)
+0:44              Function Call: vectorCond( ( temp 4-component vector of float)
+0:44            Function Call: scalarCond( ( temp 4-component vector of float)
+0:45          Construct vec4 ( temp 4-component vector of float)
+0:45            Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float)
+0:45              Constant:
+0:45                true (const bool)
+0:45                false (const bool)
+0:45              Constant:
+0:45                1.000000
+0:45                2.000000
+0:45              Constant:
+0:45                3.000000
+0:45                4.000000
+0:45            Constant:
+0:45              10.000000
+0:45            Constant:
+0:45              10.000000
 0:27  Function Definition: PixelShaderFunction( ( temp void)
 0:27    Function Parameters: 
 0:?     Sequence
@@ -523,12 +653,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 206
+// Id's are bound by 233
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 199 202
+                              EntryPoint Fragment 4  "PixelShaderFunction" 226 229
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
@@ -555,13 +685,17 @@
                               Name 117  "ret"
                               Name 137  "e"
                               Name 150  "f"
-                              Name 186  "param"
-                              Name 187  "param"
-                              Name 188  "param"
-                              Name 197  "input"
-                              Name 199  "input"
-                              Name 202  "@entryPointOutput"
-                              Name 203  "param"
+                              Name 169  "g"
+                              Name 175  "h"
+                              Name 181  "i"
+                              Name 187  "j"
+                              Name 213  "param"
+                              Name 214  "param"
+                              Name 215  "param"
+                              Name 224  "input"
+                              Name 226  "input"
+                              Name 229  "@entryPointOutput"
+                              Name 230  "param"
                               MemberDecorate 29($Global) 0 Offset 0
                               MemberDecorate 29($Global) 1 Offset 16
                               MemberDecorate 29($Global) 2 Offset 32
@@ -570,8 +704,8 @@
                               Decorate 29($Global) Block
                               Decorate 31 DescriptorSet 0
                               Decorate 31 Binding 0
-                              Decorate 199(input) Location 0
-                              Decorate 202(@entryPointOutput) Location 0
+                              Decorate 226(input) Location 0
+                              Decorate 229(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -611,29 +745,35 @@
              148:     32(int) Constant 11
              151:             TypePointer Function 6(float)
              154:    139(int) Constant 1
-             178:    13(bool) ConstantTrue
-             179:    13(bool) ConstantFalse
-             180:   14(bvec2) ConstantComposite 178 179
-             181:    6(float) Constant 1073741824
-             182:   16(fvec2) ConstantComposite 96 181
-             183:    6(float) Constant 1077936128
-             184:    6(float) Constant 1082130432
-             185:   16(fvec2) ConstantComposite 183 184
-             190:    6(float) Constant 1092616192
-             198:             TypePointer Input 7(fvec4)
-      199(input):    198(ptr) Variable Input
-             201:             TypePointer Output 7(fvec4)
-202(@entryPointOutput):    201(ptr) Variable Output
+             168:             TypePointer Function 139(int)
+             173:    139(int) Constant 21
+             179:    139(int) Constant 63
+             185:    139(int) Constant 5
+             191:     32(int) Constant 43981
+             192:     32(int) Constant 48346
+             205:    13(bool) ConstantTrue
+             206:    13(bool) ConstantFalse
+             207:   14(bvec2) ConstantComposite 205 206
+             208:    6(float) Constant 1073741824
+             209:   16(fvec2) ConstantComposite 96 208
+             210:    6(float) Constant 1077936128
+             211:    6(float) Constant 1082130432
+             212:   16(fvec2) ConstantComposite 210 211
+             217:    6(float) Constant 1092616192
+             225:             TypePointer Input 7(fvec4)
+      226(input):    225(ptr) Variable Input
+             228:             TypePointer Output 7(fvec4)
+229(@entryPointOutput):    228(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-      197(input):     24(ptr) Variable Function
-      203(param):     24(ptr) Variable Function
-             200:    7(fvec4) Load 199(input)
-                              Store 197(input) 200
-             204:    7(fvec4) Load 197(input)
-                              Store 203(param) 204
-             205:    7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 203(param)
-                              Store 202(@entryPointOutput) 205
+      224(input):     24(ptr) Variable Function
+      230(param):     24(ptr) Variable Function
+             227:    7(fvec4) Load 226(input)
+                              Store 224(input) 227
+             231:    7(fvec4) Load 224(input)
+                              Store 230(param) 231
+             232:    7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 230(param)
+                              Store 229(@entryPointOutput) 232
                               Return
                               FunctionEnd
   9(vectorCond():    7(fvec4) Function None 8
@@ -720,9 +860,13 @@
         117(ret):     24(ptr) Variable Function
           137(e):    109(ptr) Variable Function
           150(f):     24(ptr) Variable Function
-      186(param):     15(ptr) Variable Function
-      187(param):     17(ptr) Variable Function
-      188(param):     17(ptr) Variable Function
+          169(g):    168(ptr) Variable Function
+          175(h):    168(ptr) Variable Function
+          181(i):    168(ptr) Variable Function
+          187(j):    168(ptr) Variable Function
+      213(param):     15(ptr) Variable Function
+      214(param):     17(ptr) Variable Function
+      215(param):     17(ptr) Variable Function
                               Store 110(a) 111
                               Store 112(b) 113
                               Store 114(c) 115
@@ -776,23 +920,44 @@
              166:   43(bvec4) CompositeConstruct 157 157 157 157
              167:    7(fvec4) Select 166 161 165
                               Store 150(f) 167
-             168:     32(int) Load 137(e)
-             169:    6(float) ConvertSToF 168
-             170:    7(fvec4) Load 117(ret)
-             171:    7(fvec4) VectorTimesScalar 170 169
-             172:    7(fvec4) Load 150(f)
-             173:    7(fvec4) FAdd 171 172
-             174:    7(fvec4) FunctionCall 9(vectorCond()
-             175:    7(fvec4) FAdd 173 174
-             176:    7(fvec4) FunctionCall 11(scalarCond()
-             177:    7(fvec4) FAdd 175 176
-                              Store 186(param) 180
-                              Store 187(param) 182
-                              Store 188(param) 185
-             189:   16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 186(param) 187(param) 188(param)
-             191:    6(float) CompositeExtract 189 0
-             192:    6(float) CompositeExtract 189 1
-             193:    7(fvec4) CompositeConstruct 191 192 190 190
-             194:    7(fvec4) FAdd 177 193
-                              ReturnValue 194
+             170:     32(int) Load 116(d)
+             171:    6(float) ConvertSToF 170
+             172:    13(bool) FOrdGreaterThan 171 44
+             174:    139(int) Select 172 173 140
+                              Store 169(g) 174
+             176:    139(int) Load 169(g)
+             177:    6(float) ConvertUToF 176
+             178:    13(bool) FOrdGreaterThan 177 44
+             180:    139(int) Select 178 179 140
+                              Store 175(h) 180
+             182:    139(int) Load 175(h)
+             183:    6(float) ConvertUToF 182
+             184:    13(bool) FOrdGreaterThan 183 44
+             186:    139(int) Select 184 185 154
+                              Store 181(i) 186
+             188:    139(int) Load 181(i)
+             189:    6(float) ConvertUToF 188
+             190:    13(bool) FOrdGreaterThan 189 44
+             193:     32(int) Select 190 191 192
+             194:    139(int) Bitcast 193
+                              Store 187(j) 194
+             195:     32(int) Load 137(e)
+             196:    6(float) ConvertSToF 195
+             197:    7(fvec4) Load 117(ret)
+             198:    7(fvec4) VectorTimesScalar 197 196
+             199:    7(fvec4) Load 150(f)
+             200:    7(fvec4) FAdd 198 199
+             201:    7(fvec4) FunctionCall 9(vectorCond()
+             202:    7(fvec4) FAdd 200 201
+             203:    7(fvec4) FunctionCall 11(scalarCond()
+             204:    7(fvec4) FAdd 202 203
+                              Store 213(param) 207
+                              Store 214(param) 209
+                              Store 215(param) 212
+             216:   16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 213(param) 214(param) 215(param)
+             218:    6(float) CompositeExtract 216 0
+             219:    6(float) CompositeExtract 216 1
+             220:    7(fvec4) CompositeConstruct 218 219 217 217
+             221:    7(fvec4) FAdd 204 220
+                              ReturnValue 221
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.emptystructreturn.tesc.out b/Test/baseResults/hlsl.emptystructreturn.tesc.out
new file mode 100644
index 0000000..ffdbb02
--- /dev/null
+++ b/Test/baseResults/hlsl.emptystructreturn.tesc.out
@@ -0,0 +1,606 @@
+hlsl.emptystructreturn.tesc
+Shader version: 500
+vertices = 3
+vertex spacing = equal_spacing
+triangle order = cw
+0:? Sequence
+0:16  Function Definition: blob(struct-HullInputType-vf41[3]; ( temp void)
+0:16    Function Parameters: 
+0:16      'patch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:20  Function Definition: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:20    Function Parameters: 
+0:20      'inputPatch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:20      'patchId' ( in uint)
+0:?     Sequence
+0:24      move second child to first child ( temp float)
+0:24        direct index ( temp float)
+0:24          edges: direct index for structure ( temp 3-element array of float)
+0:24            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        Constant:
+0:24          2.000000
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          edges: direct index for structure ( temp 3-element array of float)
+0:25            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            1 (const int)
+0:25        Constant:
+0:25          2.000000
+0:26      move second child to first child ( temp float)
+0:26        direct index ( temp float)
+0:26          edges: direct index for structure ( temp 3-element array of float)
+0:26            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            2 (const int)
+0:26        Constant:
+0:26          2.000000
+0:29      move second child to first child ( temp float)
+0:29        inside: direct index for structure ( temp float)
+0:29          'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:29          Constant:
+0:29            1 (const int)
+0:29        Constant:
+0:29          2.000000
+0:31      Branch: Return with expression
+0:31        'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:42  Function Definition: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{})
+0:42    Function Parameters: 
+0:42      'stage_input' ( in structure{})
+0:42      'patch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:42      'pointId' ( in uint)
+0:42      'patchId' ( in uint)
+0:?     Sequence
+0:44      Function Call: blob(struct-HullInputType-vf41[3]; ( temp void)
+0:44        'patch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:46      Branch: Return with expression
+0:46        'output' ( temp structure{})
+0:42  Function Definition: main( ( temp void)
+0:42    Function Parameters: 
+0:?     Sequence
+0:42      Sequence
+0:42        move second child to first child ( temp structure{})
+0:?           'stage_input' ( temp structure{})
+0:?           'stage_input' ( in structure{})
+0:42      Sequence
+0:42        move second child to first child ( temp 4-component vector of float)
+0:42          position: direct index for structure ( temp 4-component vector of float)
+0:42            direct index ( temp structure{ temp 4-component vector of float position})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:42              Constant:
+0:42                0 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          direct index ( in 4-component vector of float Position)
+0:?             'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:42            Constant:
+0:42              0 (const int)
+0:42        move second child to first child ( temp 4-component vector of float)
+0:42          position: direct index for structure ( temp 4-component vector of float)
+0:42            direct index ( temp structure{ temp 4-component vector of float position})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:42              Constant:
+0:42                1 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          direct index ( in 4-component vector of float Position)
+0:?             'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:42            Constant:
+0:42              1 (const int)
+0:42        move second child to first child ( temp 4-component vector of float)
+0:42          position: direct index for structure ( temp 4-component vector of float)
+0:42            direct index ( temp structure{ temp 4-component vector of float position})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:42              Constant:
+0:42                2 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          direct index ( in 4-component vector of float Position)
+0:?             'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:42            Constant:
+0:42              2 (const int)
+0:42      move second child to first child ( temp uint)
+0:?         'pointId' ( temp uint)
+0:?         'pointId' ( in uint InvocationID)
+0:42      move second child to first child ( temp uint)
+0:?         'patchId' ( temp uint)
+0:?         'patchId' ( in uint PrimitiveID)
+0:42      Sequence
+0:42        move second child to first child ( temp structure{})
+0:42          indirect index ( out structure{})
+0:?             '@entryPointOutput' ( out 3-element array of structure{})
+0:?             'pointId' ( in uint InvocationID)
+0:42          Function Call: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{})
+0:?             'stage_input' ( temp structure{})
+0:?             'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:?             'pointId' ( temp uint)
+0:?             'patchId' ( temp uint)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'pointId' ( in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?             Function Call: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:?               'patchId' ( in uint PrimitiveID)
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelInner)
+0:?                 '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               inside: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?   Linker Objects
+0:?     'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:?     'pointId' ( in uint InvocationID)
+0:?     'patchId' ( in uint PrimitiveID)
+0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 500
+vertices = 3
+vertex spacing = equal_spacing
+triangle order = cw
+0:? Sequence
+0:16  Function Definition: blob(struct-HullInputType-vf41[3]; ( temp void)
+0:16    Function Parameters: 
+0:16      'patch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:20  Function Definition: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:20    Function Parameters: 
+0:20      'inputPatch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:20      'patchId' ( in uint)
+0:?     Sequence
+0:24      move second child to first child ( temp float)
+0:24        direct index ( temp float)
+0:24          edges: direct index for structure ( temp 3-element array of float)
+0:24            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        Constant:
+0:24          2.000000
+0:25      move second child to first child ( temp float)
+0:25        direct index ( temp float)
+0:25          edges: direct index for structure ( temp 3-element array of float)
+0:25            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            1 (const int)
+0:25        Constant:
+0:25          2.000000
+0:26      move second child to first child ( temp float)
+0:26        direct index ( temp float)
+0:26          edges: direct index for structure ( temp 3-element array of float)
+0:26            'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            2 (const int)
+0:26        Constant:
+0:26          2.000000
+0:29      move second child to first child ( temp float)
+0:29        inside: direct index for structure ( temp float)
+0:29          'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:29          Constant:
+0:29            1 (const int)
+0:29        Constant:
+0:29          2.000000
+0:31      Branch: Return with expression
+0:31        'output' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:42  Function Definition: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{})
+0:42    Function Parameters: 
+0:42      'stage_input' ( in structure{})
+0:42      'patch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:42      'pointId' ( in uint)
+0:42      'patchId' ( in uint)
+0:?     Sequence
+0:44      Function Call: blob(struct-HullInputType-vf41[3]; ( temp void)
+0:44        'patch' ( in 3-element array of structure{ temp 4-component vector of float position})
+0:46      Branch: Return with expression
+0:46        'output' ( temp structure{})
+0:42  Function Definition: main( ( temp void)
+0:42    Function Parameters: 
+0:?     Sequence
+0:42      Sequence
+0:42        move second child to first child ( temp structure{})
+0:?           'stage_input' ( temp structure{})
+0:?           'stage_input' ( in structure{})
+0:42      Sequence
+0:42        move second child to first child ( temp 4-component vector of float)
+0:42          position: direct index for structure ( temp 4-component vector of float)
+0:42            direct index ( temp structure{ temp 4-component vector of float position})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:42              Constant:
+0:42                0 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          direct index ( in 4-component vector of float Position)
+0:?             'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:42            Constant:
+0:42              0 (const int)
+0:42        move second child to first child ( temp 4-component vector of float)
+0:42          position: direct index for structure ( temp 4-component vector of float)
+0:42            direct index ( temp structure{ temp 4-component vector of float position})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:42              Constant:
+0:42                1 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          direct index ( in 4-component vector of float Position)
+0:?             'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:42            Constant:
+0:42              1 (const int)
+0:42        move second child to first child ( temp 4-component vector of float)
+0:42          position: direct index for structure ( temp 4-component vector of float)
+0:42            direct index ( temp structure{ temp 4-component vector of float position})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:42              Constant:
+0:42                2 (const int)
+0:42            Constant:
+0:42              0 (const int)
+0:42          direct index ( in 4-component vector of float Position)
+0:?             'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:42            Constant:
+0:42              2 (const int)
+0:42      move second child to first child ( temp uint)
+0:?         'pointId' ( temp uint)
+0:?         'pointId' ( in uint InvocationID)
+0:42      move second child to first child ( temp uint)
+0:?         'patchId' ( temp uint)
+0:?         'patchId' ( in uint PrimitiveID)
+0:42      Sequence
+0:42        move second child to first child ( temp structure{})
+0:42          indirect index ( out structure{})
+0:?             '@entryPointOutput' ( out 3-element array of structure{})
+0:?             'pointId' ( in uint InvocationID)
+0:42          Function Call: @main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1; ( temp structure{})
+0:?             'stage_input' ( temp structure{})
+0:?             'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:?             'pointId' ( temp uint)
+0:?             'patchId' ( temp uint)
+0:?       Barrier ( temp void)
+0:?       Test condition and select ( temp void)
+0:?         Condition
+0:?         Compare Equal ( temp bool)
+0:?           'pointId' ( in uint InvocationID)
+0:?           Constant:
+0:?             0 (const int)
+0:?         true case
+0:?         Sequence
+0:?           move second child to first child ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?             '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?             Function Call: ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1; ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?               'patch' ( temp 3-element array of structure{ temp 4-component vector of float position})
+0:?               'patchId' ( in uint PrimitiveID)
+0:?           Sequence
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   1 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelOuter)
+0:?                 '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?               direct index ( temp float)
+0:?                 edges: direct index for structure ( temp 3-element array of float)
+0:?                   '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                   Constant:
+0:?                     0 (const int)
+0:?                 Constant:
+0:?                   2 (const int)
+0:?             move second child to first child ( temp float)
+0:?               direct index ( patch out float TessLevelInner)
+0:?                 '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
+0:?                 Constant:
+0:?                   0 (const int)
+0:?               inside: direct index for structure ( temp float)
+0:?                 '@patchConstantResult' ( temp structure{ temp 3-element array of float edges,  temp float inside})
+0:?                 Constant:
+0:?                   1 (const int)
+0:?   Linker Objects
+0:?     'patch.position' ( in 3-element array of 4-component vector of float Position)
+0:?     'pointId' ( in uint InvocationID)
+0:?     'patchId' ( in uint PrimitiveID)
+0:?     '@patchConstantOutput.edges' ( patch out 4-element array of float TessLevelOuter)
+0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
+
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 132
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 65 79 82 115 128
+                              ExecutionMode 4 OutputVertices 3
+                              ExecutionMode 4 Triangles
+                              ExecutionMode 4 SpacingEqual
+                              ExecutionMode 4 VertexOrderCw
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "HullInputType"
+                              MemberName 8(HullInputType) 0  "position"
+                              Name 15  "blob(struct-HullInputType-vf41[3];"
+                              Name 14  "patch"
+                              Name 19  "ConstantOutputType"
+                              MemberName 19(ConstantOutputType) 0  "edges"
+                              MemberName 19(ConstantOutputType) 1  "inside"
+                              Name 23  "ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1;"
+                              Name 21  "inputPatch"
+                              Name 22  "patchId"
+                              Name 25  "EmptyStruct"
+                              Name 27  "HullOutputType"
+                              Name 33  "@main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1;"
+                              Name 29  "stage_input"
+                              Name 30  "patch"
+                              Name 31  "pointId"
+                              Name 32  "patchId"
+                              Name 36  "output"
+                              Name 50  "param"
+                              Name 54  "output"
+                              Name 58  "stage_input"
+                              Name 60  "stage_input"
+                              Name 62  "patch"
+                              Name 65  "patch.position"
+                              Name 77  "pointId"
+                              Name 79  "pointId"
+                              Name 81  "patchId"
+                              Name 82  "patchId"
+                              Name 86  "@entryPointOutput"
+                              Name 88  "param"
+                              Name 90  "param"
+                              Name 92  "param"
+                              Name 94  "param"
+                              Name 107  "@patchConstantResult"
+                              Name 108  "param"
+                              Name 110  "param"
+                              Name 115  "@patchConstantOutput.edges"
+                              Name 128  "@patchConstantOutput.inside"
+                              Decorate 65(patch.position) BuiltIn Position
+                              Decorate 79(pointId) BuiltIn InvocationId
+                              Decorate 82(patchId) BuiltIn PrimitiveId
+                              Decorate 115(@patchConstantOutput.edges) Patch
+                              Decorate 115(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 128(@patchConstantOutput.inside) Patch
+                              Decorate 128(@patchConstantOutput.inside) BuiltIn TessLevelInner
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+8(HullInputType):             TypeStruct 7(fvec4)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 3
+              11:             TypeArray 8(HullInputType) 10
+              12:             TypePointer Function 11
+              13:             TypeFunction 2 12(ptr)
+              17:             TypePointer Function 9(int)
+              18:             TypeArray 6(float) 10
+19(ConstantOutputType):             TypeStruct 18 6(float)
+              20:             TypeFunction 19(ConstantOutputType) 12(ptr) 17(ptr)
+ 25(EmptyStruct):             TypeStruct
+              26:             TypePointer Function 25(EmptyStruct)
+27(HullOutputType):             TypeStruct
+              28:             TypeFunction 27(HullOutputType) 26(ptr) 12(ptr) 17(ptr) 17(ptr)
+              35:             TypePointer Function 19(ConstantOutputType)
+              37:             TypeInt 32 1
+              38:     37(int) Constant 0
+              39:    6(float) Constant 1073741824
+              40:             TypePointer Function 6(float)
+              42:     37(int) Constant 1
+              44:     37(int) Constant 2
+              53:             TypePointer Function 27(HullOutputType)
+              59:             TypePointer Input 25(EmptyStruct)
+ 60(stage_input):     59(ptr) Variable Input
+              63:             TypeArray 7(fvec4) 10
+              64:             TypePointer Input 63
+65(patch.position):     64(ptr) Variable Input
+              66:             TypePointer Input 7(fvec4)
+              69:             TypePointer Function 7(fvec4)
+              78:             TypePointer Input 9(int)
+     79(pointId):     78(ptr) Variable Input
+     82(patchId):     78(ptr) Variable Input
+              84:             TypeArray 27(HullOutputType) 10
+              85:             TypePointer Output 84
+86(@entryPointOutput):     85(ptr) Variable Output
+              97:             TypePointer Output 27(HullOutputType)
+              99:      9(int) Constant 2
+             100:      9(int) Constant 4
+             101:      9(int) Constant 0
+             103:             TypeBool
+             113:             TypeArray 6(float) 100
+             114:             TypePointer Output 113
+115(@patchConstantOutput.edges):    114(ptr) Variable Output
+             118:             TypePointer Output 6(float)
+             126:             TypeArray 6(float) 99
+             127:             TypePointer Output 126
+128(@patchConstantOutput.inside):    127(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+ 58(stage_input):     26(ptr) Variable Function
+       62(patch):     12(ptr) Variable Function
+     77(pointId):     17(ptr) Variable Function
+     81(patchId):     17(ptr) Variable Function
+       88(param):     26(ptr) Variable Function
+       90(param):     12(ptr) Variable Function
+       92(param):     17(ptr) Variable Function
+       94(param):     17(ptr) Variable Function
+107(@patchConstantResult):     35(ptr) Variable Function
+      108(param):     12(ptr) Variable Function
+      110(param):     17(ptr) Variable Function
+              61:25(EmptyStruct) Load 60(stage_input)
+                              Store 58(stage_input) 61
+              67:     66(ptr) AccessChain 65(patch.position) 38
+              68:    7(fvec4) Load 67
+              70:     69(ptr) AccessChain 62(patch) 38 38
+                              Store 70 68
+              71:     66(ptr) AccessChain 65(patch.position) 42
+              72:    7(fvec4) Load 71
+              73:     69(ptr) AccessChain 62(patch) 42 38
+                              Store 73 72
+              74:     66(ptr) AccessChain 65(patch.position) 44
+              75:    7(fvec4) Load 74
+              76:     69(ptr) AccessChain 62(patch) 44 38
+                              Store 76 75
+              80:      9(int) Load 79(pointId)
+                              Store 77(pointId) 80
+              83:      9(int) Load 82(patchId)
+                              Store 81(patchId) 83
+              87:      9(int) Load 79(pointId)
+              89:25(EmptyStruct) Load 58(stage_input)
+                              Store 88(param) 89
+              91:          11 Load 62(patch)
+                              Store 90(param) 91
+              93:      9(int) Load 77(pointId)
+                              Store 92(param) 93
+              95:      9(int) Load 81(patchId)
+                              Store 94(param) 95
+              96:27(HullOutputType) FunctionCall 33(@main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1;) 88(param) 90(param) 92(param) 94(param)
+              98:     97(ptr) AccessChain 86(@entryPointOutput) 87
+                              Store 98 96
+                              ControlBarrier 99 100 101
+             102:      9(int) Load 79(pointId)
+             104:   103(bool) IEqual 102 38
+                              SelectionMerge 106 None
+                              BranchConditional 104 105 106
+             105:               Label
+             109:          11   Load 62(patch)
+                                Store 108(param) 109
+             111:      9(int)   Load 82(patchId)
+                                Store 110(param) 111
+             112:19(ConstantOutputType)   FunctionCall 23(ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1;) 108(param) 110(param)
+                                Store 107(@patchConstantResult) 112
+             116:     40(ptr)   AccessChain 107(@patchConstantResult) 38 38
+             117:    6(float)   Load 116
+             119:    118(ptr)   AccessChain 115(@patchConstantOutput.edges) 38
+                                Store 119 117
+             120:     40(ptr)   AccessChain 107(@patchConstantResult) 38 42
+             121:    6(float)   Load 120
+             122:    118(ptr)   AccessChain 115(@patchConstantOutput.edges) 42
+                                Store 122 121
+             123:     40(ptr)   AccessChain 107(@patchConstantResult) 38 44
+             124:    6(float)   Load 123
+             125:    118(ptr)   AccessChain 115(@patchConstantOutput.edges) 44
+                                Store 125 124
+             129:     40(ptr)   AccessChain 107(@patchConstantResult) 42
+             130:    6(float)   Load 129
+             131:    118(ptr)   AccessChain 128(@patchConstantOutput.inside) 38
+                                Store 131 130
+                                Branch 106
+             106:             Label
+                              Return
+                              FunctionEnd
+15(blob(struct-HullInputType-vf41[3];):           2 Function None 13
+       14(patch):     12(ptr) FunctionParameter
+              16:             Label
+                              Return
+                              FunctionEnd
+23(ColorPatchConstantFunction(struct-HullInputType-vf41[3];u1;):19(ConstantOutputType) Function None 20
+  21(inputPatch):     12(ptr) FunctionParameter
+     22(patchId):     17(ptr) FunctionParameter
+              24:             Label
+      36(output):     35(ptr) Variable Function
+              41:     40(ptr) AccessChain 36(output) 38 38
+                              Store 41 39
+              43:     40(ptr) AccessChain 36(output) 38 42
+                              Store 43 39
+              45:     40(ptr) AccessChain 36(output) 38 44
+                              Store 45 39
+              46:     40(ptr) AccessChain 36(output) 42
+                              Store 46 39
+              47:19(ConstantOutputType) Load 36(output)
+                              ReturnValue 47
+                              FunctionEnd
+33(@main(struct-EmptyStruct1;struct-HullInputType-vf41[3];u1;u1;):27(HullOutputType) Function None 28
+ 29(stage_input):     26(ptr) FunctionParameter
+       30(patch):     12(ptr) FunctionParameter
+     31(pointId):     17(ptr) FunctionParameter
+     32(patchId):     17(ptr) FunctionParameter
+              34:             Label
+       50(param):     12(ptr) Variable Function
+      54(output):     53(ptr) Variable Function
+              51:          11 Load 30(patch)
+                              Store 50(param) 51
+              52:           2 FunctionCall 15(blob(struct-HullInputType-vf41[3];) 50(param)
+              55:27(HullOutputType) Load 54(output)
+                              ReturnValue 55
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.function.frag.out b/Test/baseResults/hlsl.function.frag.out
index faa3147..ebf20fe 100644
--- a/Test/baseResults/hlsl.function.frag.out
+++ b/Test/baseResults/hlsl.function.frag.out
@@ -1,6 +1,6 @@
 hlsl.function.frag
-ERROR: 0:24: 'fun1' : unknown variable 
-ERROR: 0:24: 'return' : type does not match, or is not convertible to, the function's return type 
+ERROR: 0:29: 'fun1' : unknown variable 
+ERROR: 0:29: 'return' : type does not match, or is not convertible to, the function's return type 
 ERROR: 2 compilation errors.  No code generated.
 
 
@@ -16,45 +16,63 @@
 0:3          1.000000
 0:3          1.000000
 0:3          1.000000
-0:7  Function Definition: fun2(vf4; ( temp uint)
+0:7  Function Definition: fun2(vf4; ( temp 4-component vector of float)
 0:7    Function Parameters: 
-0:7      'col' ( in 4-component vector of float)
+0:7      'col' ( const (read only) 4-component vector of float)
 0:?     Sequence
 0:8      Branch: Return with expression
-0:8        Constant:
-0:8          7 (const uint)
-0:12  Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
+0:8        Construct vec4 ( temp 4-component vector of float)
+0:8          Comma ( temp float)
+0:8            Comma ( temp float)
+0:8              Comma ( temp float)
+0:8                Constant:
+0:8                  1.000000
+0:8                Constant:
+0:8                  2.000000
+0:8              Constant:
+0:8                3.000000
+0:8            Constant:
+0:8              4.000000
+0:12  Function Definition: fun3(vf4; ( temp uint)
 0:12    Function Parameters: 
-0:12      'id1' ( in uint)
-0:12      'id2' ( uniform uint)
+0:12      'col' ( const (read only) 4-component vector of float)
 0:?     Sequence
 0:13      Branch: Return with expression
-0:13        Construct vec4 ( temp 4-component vector of float)
-0:13          Convert uint to float ( temp float)
-0:13            component-wise multiply ( temp uint)
-0:13              'id1' ( in uint)
-0:13              'id2' ( uniform uint)
-0:17  Function Definition: fun1(i1; ( temp 4-component vector of float)
+0:13        Constant:
+0:13          7 (const uint)
+0:17  Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
 0:17    Function Parameters: 
-0:17      'index' ( in int)
+0:17      'id1' ( in uint)
+0:17      'id2' ( uniform uint)
 0:?     Sequence
-0:18      Sequence
-0:18        move second child to first child ( temp uint)
-0:18          'entityId' ( temp uint)
-0:18          Function Call: fun2(vf4; ( temp uint)
-0:18            Function Call: fun0( ( temp 4-component vector of float)
-0:19      Branch: Return with expression
-0:19        Function Call: fun4(u1;u1; ( temp 4-component vector of float)
-0:19          'entityId' ( temp uint)
-0:19          'entityId' ( temp uint)
-0:23  Function Definition: @main( ( temp int)
-0:23    Function Parameters: 
-0:23  Function Definition: main( ( temp void)
-0:23    Function Parameters: 
+0:18      Branch: Return with expression
+0:18        Construct vec4 ( temp 4-component vector of float)
+0:18          Convert uint to float ( temp float)
+0:18            component-wise multiply ( temp uint)
+0:18              'id1' ( in uint)
+0:18              'id2' ( uniform uint)
+0:22  Function Definition: fun1(i1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'index' ( in int)
 0:?     Sequence
-0:23      move second child to first child ( temp int)
+0:23      Sequence
+0:23        move second child to first child ( temp uint)
+0:23          'entityId' ( temp uint)
+0:23          Function Call: fun3(vf4; ( temp uint)
+0:23            Function Call: fun2(vf4; ( temp 4-component vector of float)
+0:23              Function Call: fun0( ( temp 4-component vector of float)
+0:24      Branch: Return with expression
+0:24        Function Call: fun4(u1;u1; ( temp 4-component vector of float)
+0:24          'entityId' ( temp uint)
+0:24          'entityId' ( temp uint)
+0:28  Function Definition: @main( ( temp int)
+0:28    Function Parameters: 
+0:28  Function Definition: main( ( temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      move second child to first child ( temp int)
 0:?         '@entryPointOutput' (layout( location=0) out int)
-0:23        Function Call: @main( ( temp int)
+0:28        Function Call: @main( ( temp int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
@@ -74,45 +92,63 @@
 0:3          1.000000
 0:3          1.000000
 0:3          1.000000
-0:7  Function Definition: fun2(vf4; ( temp uint)
+0:7  Function Definition: fun2(vf4; ( temp 4-component vector of float)
 0:7    Function Parameters: 
-0:7      'col' ( in 4-component vector of float)
+0:7      'col' ( const (read only) 4-component vector of float)
 0:?     Sequence
 0:8      Branch: Return with expression
-0:8        Constant:
-0:8          7 (const uint)
-0:12  Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
+0:8        Construct vec4 ( temp 4-component vector of float)
+0:8          Comma ( temp float)
+0:8            Comma ( temp float)
+0:8              Comma ( temp float)
+0:8                Constant:
+0:8                  1.000000
+0:8                Constant:
+0:8                  2.000000
+0:8              Constant:
+0:8                3.000000
+0:8            Constant:
+0:8              4.000000
+0:12  Function Definition: fun3(vf4; ( temp uint)
 0:12    Function Parameters: 
-0:12      'id1' ( in uint)
-0:12      'id2' ( uniform uint)
+0:12      'col' ( const (read only) 4-component vector of float)
 0:?     Sequence
 0:13      Branch: Return with expression
-0:13        Construct vec4 ( temp 4-component vector of float)
-0:13          Convert uint to float ( temp float)
-0:13            component-wise multiply ( temp uint)
-0:13              'id1' ( in uint)
-0:13              'id2' ( uniform uint)
-0:17  Function Definition: fun1(i1; ( temp 4-component vector of float)
+0:13        Constant:
+0:13          7 (const uint)
+0:17  Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
 0:17    Function Parameters: 
-0:17      'index' ( in int)
+0:17      'id1' ( in uint)
+0:17      'id2' ( uniform uint)
 0:?     Sequence
-0:18      Sequence
-0:18        move second child to first child ( temp uint)
-0:18          'entityId' ( temp uint)
-0:18          Function Call: fun2(vf4; ( temp uint)
-0:18            Function Call: fun0( ( temp 4-component vector of float)
-0:19      Branch: Return with expression
-0:19        Function Call: fun4(u1;u1; ( temp 4-component vector of float)
-0:19          'entityId' ( temp uint)
-0:19          'entityId' ( temp uint)
-0:23  Function Definition: @main( ( temp int)
-0:23    Function Parameters: 
-0:23  Function Definition: main( ( temp void)
-0:23    Function Parameters: 
+0:18      Branch: Return with expression
+0:18        Construct vec4 ( temp 4-component vector of float)
+0:18          Convert uint to float ( temp float)
+0:18            component-wise multiply ( temp uint)
+0:18              'id1' ( in uint)
+0:18              'id2' ( uniform uint)
+0:22  Function Definition: fun1(i1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'index' ( in int)
 0:?     Sequence
-0:23      move second child to first child ( temp int)
+0:23      Sequence
+0:23        move second child to first child ( temp uint)
+0:23          'entityId' ( temp uint)
+0:23          Function Call: fun3(vf4; ( temp uint)
+0:23            Function Call: fun2(vf4; ( temp 4-component vector of float)
+0:23              Function Call: fun0( ( temp 4-component vector of float)
+0:24      Branch: Return with expression
+0:24        Function Call: fun4(u1;u1; ( temp 4-component vector of float)
+0:24          'entityId' ( temp uint)
+0:24          'entityId' ( temp uint)
+0:28  Function Definition: @main( ( temp int)
+0:28    Function Parameters: 
+0:28  Function Definition: main( ( temp void)
+0:28    Function Parameters: 
+0:?     Sequence
+0:28      move second child to first child ( temp int)
 0:?         '@entryPointOutput' (layout( location=0) out int)
-0:23        Function Call: @main( ( temp int)
+0:28        Function Call: @main( ( temp int)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out int)
 
diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out
index b8b7afc..bf6d646 100644
--- a/Test/baseResults/hlsl.init2.frag.out
+++ b/Test/baseResults/hlsl.init2.frag.out
@@ -31,29 +31,20 @@
 0:20            10.000000
 0:22      Constant:
 0:22        10.000000
-0:25      Sequence
-0:25        move second child to first child ( temp float)
-0:25          'n' ( temp float)
-0:25          Constant:
-0:25            0.000000
 0:26      Sequence
-0:26        move second child to first child ( temp 8-element array of 3-component vector of float)
-0:26          'a' ( const (read only) 8-element array of 3-component vector of float)
-0:26          Construct vec3 ( temp 8-element array of 3-component vector of float)
-0:27            vector-scale ( temp 3-component vector of float)
-0:27              Constant:
-0:27                0.577350
-0:27                0.577350
-0:27                0.577350
-0:27              add second child into first child ( temp float)
-0:27                'n' ( temp float)
-0:27                Constant:
-0:27                  1.000000
+0:26        move second child to first child ( temp float)
+0:26          'n' ( temp float)
+0:26          Constant:
+0:26            0.000000
+0:27      Sequence
+0:27        move second child to first child ( temp 8-element array of 3-component vector of float)
+0:27          'a' ( const (read only) 8-element array of 3-component vector of float)
+0:27          Construct vec3 ( temp 8-element array of 3-component vector of float)
 0:28            vector-scale ( temp 3-component vector of float)
 0:28              Constant:
-0:28                -0.577350
-0:28                -0.577350
-0:28                -0.577350
+0:28                0.577350
+0:28                0.577350
+0:28                0.577350
 0:28              add second child into first child ( temp float)
 0:28                'n' ( temp float)
 0:28                Constant:
@@ -62,7 +53,7 @@
 0:29              Constant:
 0:29                -0.577350
 0:29                -0.577350
-0:29                0.577350
+0:29                -0.577350
 0:29              add second child into first child ( temp float)
 0:29                'n' ( temp float)
 0:29                Constant:
@@ -70,8 +61,8 @@
 0:30            vector-scale ( temp 3-component vector of float)
 0:30              Constant:
 0:30                -0.577350
-0:30                0.577350
 0:30                -0.577350
+0:30                0.577350
 0:30              add second child into first child ( temp float)
 0:30                'n' ( temp float)
 0:30                Constant:
@@ -80,16 +71,16 @@
 0:31              Constant:
 0:31                -0.577350
 0:31                0.577350
-0:31                0.577350
+0:31                -0.577350
 0:31              add second child into first child ( temp float)
 0:31                'n' ( temp float)
 0:31                Constant:
 0:31                  1.000000
 0:32            vector-scale ( temp 3-component vector of float)
 0:32              Constant:
+0:32                -0.577350
 0:32                0.577350
-0:32                -0.577350
-0:32                -0.577350
+0:32                0.577350
 0:32              add second child into first child ( temp float)
 0:32                'n' ( temp float)
 0:32                Constant:
@@ -98,7 +89,7 @@
 0:33              Constant:
 0:33                0.577350
 0:33                -0.577350
-0:33                0.577350
+0:33                -0.577350
 0:33              add second child into first child ( temp float)
 0:33                'n' ( temp float)
 0:33                Constant:
@@ -106,38 +97,38 @@
 0:34            vector-scale ( temp 3-component vector of float)
 0:34              Constant:
 0:34                0.577350
-0:34                0.577350
 0:34                -0.577350
+0:34                0.577350
 0:34              add second child into first child ( temp float)
 0:34                'n' ( temp float)
 0:34                Constant:
 0:34                  1.000000
-0:36      Sequence
-0:36        move second child to first child ( temp structure{ temp 3-component vector of float a})
-0:36          'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
-0:36          Construct structure ( temp structure{ temp 3-component vector of float a})
-0:36            vector-scale ( temp 3-component vector of float)
-0:36              Constant:
-0:36                -0.577350
-0:36                0.577350
-0:36                0.577350
-0:36              add second child into first child ( temp float)
-0:36                'n' ( temp float)
-0:36                Constant:
-0:36                  1.000000
-0:38      Sequence
-0:38        move second child to first child ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
-0:38          'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
-0:38          Construct structure ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
-0:38            vector-scale ( temp 3-component vector of float)
-0:38              Constant:
-0:38                -0.577350
-0:38                0.577350
-0:38                0.577350
-0:38              add second child into first child ( temp float)
-0:38                'n' ( temp float)
-0:38                Constant:
-0:38                  1.000000
+0:35            vector-scale ( temp 3-component vector of float)
+0:35              Constant:
+0:35                0.577350
+0:35                0.577350
+0:35                -0.577350
+0:35              add second child into first child ( temp float)
+0:35                'n' ( temp float)
+0:35                Constant:
+0:35                  1.000000
+0:37      Sequence
+0:37        move second child to first child ( temp structure{ temp 3-component vector of float a})
+0:37          'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
+0:37          Construct structure ( temp structure{ temp 3-component vector of float a})
+0:37            vector-scale ( temp 3-component vector of float)
+0:37              Constant:
+0:37                -0.577350
+0:37                0.577350
+0:37                0.577350
+0:37              add second child into first child ( temp float)
+0:37                'n' ( temp float)
+0:37                Constant:
+0:37                  1.000000
+0:39      Sequence
+0:39        move second child to first child ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
+0:39          'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
+0:39          Construct structure ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
 0:39            vector-scale ( temp 3-component vector of float)
 0:39              Constant:
 0:39                -0.577350
@@ -147,32 +138,41 @@
 0:39                'n' ( temp float)
 0:39                Constant:
 0:39                  1.000000
-0:45  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:45    Function Parameters: 
+0:40            vector-scale ( temp 3-component vector of float)
+0:40              Constant:
+0:40                -0.577350
+0:40                0.577350
+0:40                0.577350
+0:40              add second child into first child ( temp float)
+0:40                'n' ( temp float)
+0:40                Constant:
+0:40                  1.000000
+0:46  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:46    Function Parameters: 
 0:?     Sequence
-0:46      Function Call: Test1( ( temp void)
-0:49      move second child to first child ( temp 4-component vector of float)
-0:49        color: direct index for structure ( temp 4-component vector of float)
-0:49          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:49          Constant:
-0:49            0 (const int)
-0:49        Constant:
-0:49          1.000000
-0:49          1.000000
-0:49          1.000000
-0:49          1.000000
-0:50      Branch: Return with expression
-0:50        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:45  Function Definition: main( ( temp void)
-0:45    Function Parameters: 
+0:47      Function Call: Test1( ( temp void)
+0:50      move second child to first child ( temp 4-component vector of float)
+0:50        color: direct index for structure ( temp 4-component vector of float)
+0:50          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:50          Constant:
+0:50            0 (const int)
+0:50        Constant:
+0:50          1.000000
+0:50          1.000000
+0:50          1.000000
+0:50          1.000000
+0:51      Branch: Return with expression
+0:51        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:46  Function Definition: main( ( temp void)
+0:46    Function Parameters: 
 0:?     Sequence
-0:45      Sequence
-0:45        move second child to first child ( temp 4-component vector of float)
+0:46      Sequence
+0:46        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:45          color: direct index for structure ( temp 4-component vector of float)
-0:45            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:45            Constant:
-0:45              0 (const int)
+0:46          color: direct index for structure ( temp 4-component vector of float)
+0:46            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:46            Constant:
+0:46              0 (const int)
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
@@ -212,29 +212,20 @@
 0:20            10.000000
 0:22      Constant:
 0:22        10.000000
-0:25      Sequence
-0:25        move second child to first child ( temp float)
-0:25          'n' ( temp float)
-0:25          Constant:
-0:25            0.000000
 0:26      Sequence
-0:26        move second child to first child ( temp 8-element array of 3-component vector of float)
-0:26          'a' ( const (read only) 8-element array of 3-component vector of float)
-0:26          Construct vec3 ( temp 8-element array of 3-component vector of float)
-0:27            vector-scale ( temp 3-component vector of float)
-0:27              Constant:
-0:27                0.577350
-0:27                0.577350
-0:27                0.577350
-0:27              add second child into first child ( temp float)
-0:27                'n' ( temp float)
-0:27                Constant:
-0:27                  1.000000
+0:26        move second child to first child ( temp float)
+0:26          'n' ( temp float)
+0:26          Constant:
+0:26            0.000000
+0:27      Sequence
+0:27        move second child to first child ( temp 8-element array of 3-component vector of float)
+0:27          'a' ( const (read only) 8-element array of 3-component vector of float)
+0:27          Construct vec3 ( temp 8-element array of 3-component vector of float)
 0:28            vector-scale ( temp 3-component vector of float)
 0:28              Constant:
-0:28                -0.577350
-0:28                -0.577350
-0:28                -0.577350
+0:28                0.577350
+0:28                0.577350
+0:28                0.577350
 0:28              add second child into first child ( temp float)
 0:28                'n' ( temp float)
 0:28                Constant:
@@ -243,7 +234,7 @@
 0:29              Constant:
 0:29                -0.577350
 0:29                -0.577350
-0:29                0.577350
+0:29                -0.577350
 0:29              add second child into first child ( temp float)
 0:29                'n' ( temp float)
 0:29                Constant:
@@ -251,8 +242,8 @@
 0:30            vector-scale ( temp 3-component vector of float)
 0:30              Constant:
 0:30                -0.577350
-0:30                0.577350
 0:30                -0.577350
+0:30                0.577350
 0:30              add second child into first child ( temp float)
 0:30                'n' ( temp float)
 0:30                Constant:
@@ -261,16 +252,16 @@
 0:31              Constant:
 0:31                -0.577350
 0:31                0.577350
-0:31                0.577350
+0:31                -0.577350
 0:31              add second child into first child ( temp float)
 0:31                'n' ( temp float)
 0:31                Constant:
 0:31                  1.000000
 0:32            vector-scale ( temp 3-component vector of float)
 0:32              Constant:
+0:32                -0.577350
 0:32                0.577350
-0:32                -0.577350
-0:32                -0.577350
+0:32                0.577350
 0:32              add second child into first child ( temp float)
 0:32                'n' ( temp float)
 0:32                Constant:
@@ -279,7 +270,7 @@
 0:33              Constant:
 0:33                0.577350
 0:33                -0.577350
-0:33                0.577350
+0:33                -0.577350
 0:33              add second child into first child ( temp float)
 0:33                'n' ( temp float)
 0:33                Constant:
@@ -287,38 +278,38 @@
 0:34            vector-scale ( temp 3-component vector of float)
 0:34              Constant:
 0:34                0.577350
-0:34                0.577350
 0:34                -0.577350
+0:34                0.577350
 0:34              add second child into first child ( temp float)
 0:34                'n' ( temp float)
 0:34                Constant:
 0:34                  1.000000
-0:36      Sequence
-0:36        move second child to first child ( temp structure{ temp 3-component vector of float a})
-0:36          'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
-0:36          Construct structure ( temp structure{ temp 3-component vector of float a})
-0:36            vector-scale ( temp 3-component vector of float)
-0:36              Constant:
-0:36                -0.577350
-0:36                0.577350
-0:36                0.577350
-0:36              add second child into first child ( temp float)
-0:36                'n' ( temp float)
-0:36                Constant:
-0:36                  1.000000
-0:38      Sequence
-0:38        move second child to first child ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
-0:38          'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
-0:38          Construct structure ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
-0:38            vector-scale ( temp 3-component vector of float)
-0:38              Constant:
-0:38                -0.577350
-0:38                0.577350
-0:38                0.577350
-0:38              add second child into first child ( temp float)
-0:38                'n' ( temp float)
-0:38                Constant:
-0:38                  1.000000
+0:35            vector-scale ( temp 3-component vector of float)
+0:35              Constant:
+0:35                0.577350
+0:35                0.577350
+0:35                -0.577350
+0:35              add second child into first child ( temp float)
+0:35                'n' ( temp float)
+0:35                Constant:
+0:35                  1.000000
+0:37      Sequence
+0:37        move second child to first child ( temp structure{ temp 3-component vector of float a})
+0:37          'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a})
+0:37          Construct structure ( temp structure{ temp 3-component vector of float a})
+0:37            vector-scale ( temp 3-component vector of float)
+0:37              Constant:
+0:37                -0.577350
+0:37                0.577350
+0:37                0.577350
+0:37              add second child into first child ( temp float)
+0:37                'n' ( temp float)
+0:37                Constant:
+0:37                  1.000000
+0:39      Sequence
+0:39        move second child to first child ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
+0:39          'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
+0:39          Construct structure ( temp structure{ temp 3-component vector of float a,  temp 3-component vector of float b})
 0:39            vector-scale ( temp 3-component vector of float)
 0:39              Constant:
 0:39                -0.577350
@@ -328,32 +319,41 @@
 0:39                'n' ( temp float)
 0:39                Constant:
 0:39                  1.000000
-0:45  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:45    Function Parameters: 
+0:40            vector-scale ( temp 3-component vector of float)
+0:40              Constant:
+0:40                -0.577350
+0:40                0.577350
+0:40                0.577350
+0:40              add second child into first child ( temp float)
+0:40                'n' ( temp float)
+0:40                Constant:
+0:40                  1.000000
+0:46  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:46    Function Parameters: 
 0:?     Sequence
-0:46      Function Call: Test1( ( temp void)
-0:49      move second child to first child ( temp 4-component vector of float)
-0:49        color: direct index for structure ( temp 4-component vector of float)
-0:49          'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:49          Constant:
-0:49            0 (const int)
-0:49        Constant:
-0:49          1.000000
-0:49          1.000000
-0:49          1.000000
-0:49          1.000000
-0:50      Branch: Return with expression
-0:50        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:45  Function Definition: main( ( temp void)
-0:45    Function Parameters: 
+0:47      Function Call: Test1( ( temp void)
+0:50      move second child to first child ( temp 4-component vector of float)
+0:50        color: direct index for structure ( temp 4-component vector of float)
+0:50          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:50          Constant:
+0:50            0 (const int)
+0:50        Constant:
+0:50          1.000000
+0:50          1.000000
+0:50          1.000000
+0:50          1.000000
+0:51      Branch: Return with expression
+0:51        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:46  Function Definition: main( ( temp void)
+0:46    Function Parameters: 
 0:?     Sequence
-0:45      Sequence
-0:45        move second child to first child ( temp 4-component vector of float)
+0:46      Sequence
+0:46        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:45          color: direct index for structure ( temp 4-component vector of float)
-0:45            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:45            Constant:
-0:45              0 (const int)
+0:46          color: direct index for structure ( temp 4-component vector of float)
+0:46            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:46            Constant:
+0:46              0 (const int)
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out
index 56752af..c02e58e 100644
--- a/Test/baseResults/hlsl.intrinsics.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.comp.out
@@ -2,334 +2,337 @@
 Shader version: 500
 local_size = (1, 1, 1)
 0:? Sequence
-0:17  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
-0:17    Function Parameters: 
-0:17      'inF0' ( in float)
-0:17      'inF1' ( in float)
-0:17      'inF2' ( in float)
-0:17      'inU0' ( in uint)
-0:17      'inU1' ( in uint)
+0:19  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
+0:19    Function Parameters: 
+0:19      'inF0' ( in float)
+0:19      'inF1' ( in float)
+0:19      'inF2' ( in float)
+0:19      'inU0' ( in uint)
+0:19      'inU1' ( in uint)
 0:?     Sequence
-0:21      all ( temp bool)
-0:21        Convert float to bool ( temp bool)
-0:21          'inF0' ( in float)
-0:24      AtomicAdd ( temp uint)
-0:24        'gs_ua' ( shared uint)
-0:24        'gs_ub' ( shared uint)
-0:25      move second child to first child ( temp uint)
-0:25        'out_u1' ( temp uint)
-0:25        AtomicAdd ( temp uint)
-0:25          'gs_ua' ( shared uint)
-0:25          'gs_ub' ( shared uint)
-0:26      AtomicAnd ( temp uint)
+0:23      all ( temp bool)
+0:23        Convert float to bool ( temp bool)
+0:23          'inF0' ( in float)
+0:26      AtomicAdd ( temp uint)
 0:26        'gs_ua' ( shared uint)
 0:26        'gs_ub' ( shared uint)
 0:27      move second child to first child ( temp uint)
 0:27        'out_u1' ( temp uint)
-0:27        AtomicAnd ( temp uint)
+0:27        AtomicAdd ( temp uint)
 0:27          'gs_ua' ( shared uint)
 0:27          'gs_ub' ( shared uint)
-0:28      move second child to first child ( temp uint)
-0:28        'out_u1' ( temp uint)
-0:28        AtomicCompSwap ( temp uint)
-0:28          'gs_ua' ( shared uint)
-0:28          'gs_ub' ( shared uint)
-0:28          'gs_uc' ( shared uint)
+0:28      AtomicAnd ( temp uint)
+0:28        'gs_ua' ( shared uint)
+0:28        'gs_ub' ( shared uint)
 0:29      move second child to first child ( temp uint)
 0:29        'out_u1' ( temp uint)
-0:29        AtomicExchange ( temp uint)
+0:29        AtomicAnd ( temp uint)
 0:29          'gs_ua' ( shared uint)
 0:29          'gs_ub' ( shared uint)
-0:30      AtomicMax ( temp uint)
-0:30        'gs_ua' ( shared uint)
-0:30        'gs_ub' ( shared uint)
+0:30      move second child to first child ( temp uint)
+0:30        'out_u1' ( temp uint)
+0:30        AtomicCompSwap ( temp uint)
+0:30          'gs_ua' ( shared uint)
+0:30          'gs_ub' ( shared uint)
+0:30          'gs_uc' ( shared uint)
 0:31      move second child to first child ( temp uint)
 0:31        'out_u1' ( temp uint)
-0:31        AtomicMax ( temp uint)
+0:31        AtomicExchange ( temp uint)
 0:31          'gs_ua' ( shared uint)
 0:31          'gs_ub' ( shared uint)
-0:32      AtomicMin ( temp uint)
+0:32      AtomicMax ( temp uint)
 0:32        'gs_ua' ( shared uint)
 0:32        'gs_ub' ( shared uint)
 0:33      move second child to first child ( temp uint)
 0:33        'out_u1' ( temp uint)
-0:33        AtomicMin ( temp uint)
+0:33        AtomicMax ( temp uint)
 0:33          'gs_ua' ( shared uint)
 0:33          'gs_ub' ( shared uint)
-0:34      AtomicOr ( temp uint)
+0:34      AtomicMin ( temp uint)
 0:34        'gs_ua' ( shared uint)
 0:34        'gs_ub' ( shared uint)
 0:35      move second child to first child ( temp uint)
 0:35        'out_u1' ( temp uint)
-0:35        AtomicOr ( temp uint)
+0:35        AtomicMin ( temp uint)
 0:35          'gs_ua' ( shared uint)
 0:35          'gs_ub' ( shared uint)
-0:36      AtomicXor ( temp uint)
+0:36      AtomicOr ( temp uint)
 0:36        'gs_ua' ( shared uint)
 0:36        'gs_ub' ( shared uint)
 0:37      move second child to first child ( temp uint)
 0:37        'out_u1' ( temp uint)
-0:37        AtomicXor ( temp uint)
+0:37        AtomicOr ( temp uint)
 0:37          'gs_ua' ( shared uint)
 0:37          'gs_ub' ( shared uint)
-0:41      Branch: Return with expression
-0:41        Constant:
-0:41          0.000000
-0:45  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:45    Function Parameters: 
-0:45      'inF0' ( in 1-component vector of float)
-0:45      'inF1' ( in 1-component vector of float)
-0:45      'inF2' ( in 1-component vector of float)
+0:38      AtomicXor ( temp uint)
+0:38        'gs_ua' ( shared uint)
+0:38        'gs_ub' ( shared uint)
+0:39      move second child to first child ( temp uint)
+0:39        'out_u1' ( temp uint)
+0:39        AtomicXor ( temp uint)
+0:39          'gs_ua' ( shared uint)
+0:39          'gs_ub' ( shared uint)
+0:41      AtomicAdd ( temp float)
+0:41        'gs_fa' ( shared float)
+0:41        'gs_fb' ( shared float)
+0:45      Branch: Return with expression
+0:45        Constant:
+0:45          0.000000
+0:49  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:49    Function Parameters: 
+0:49      'inF0' ( in 1-component vector of float)
+0:49      'inF1' ( in 1-component vector of float)
+0:49      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:47      Branch: Return with expression
-0:47        Constant:
-0:47          0.000000
-0:51  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:51    Function Parameters: 
-0:51      'inF0' ( in 2-component vector of float)
-0:51      'inF1' ( in 2-component vector of float)
-0:51      'inF2' ( in 2-component vector of float)
-0:51      'inU0' ( in 2-component vector of uint)
-0:51      'inU1' ( in 2-component vector of uint)
+0:51      Branch: Return with expression
+0:51        Constant:
+0:51          0.000000
+0:55  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:55    Function Parameters: 
+0:55      'inF0' ( in 2-component vector of float)
+0:55      'inF1' ( in 2-component vector of float)
+0:55      'inF2' ( in 2-component vector of float)
+0:55      'inU0' ( in 2-component vector of uint)
+0:55      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:55      all ( temp bool)
-0:55        Convert float to bool ( temp 2-component vector of bool)
-0:55          'inF0' ( in 2-component vector of float)
-0:58      AtomicAdd ( temp 2-component vector of uint)
-0:58        'gs_ua2' ( shared 2-component vector of uint)
-0:58        'gs_ub2' ( shared 2-component vector of uint)
-0:59      move second child to first child ( temp 2-component vector of uint)
-0:59        'out_u2' ( temp 2-component vector of uint)
-0:59        AtomicAdd ( temp 2-component vector of uint)
-0:59          'gs_ua2' ( shared 2-component vector of uint)
-0:59          'gs_ub2' ( shared 2-component vector of uint)
-0:60      AtomicAnd ( temp 2-component vector of uint)
-0:60        'gs_ua2' ( shared 2-component vector of uint)
-0:60        'gs_ub2' ( shared 2-component vector of uint)
-0:61      move second child to first child ( temp 2-component vector of uint)
-0:61        'out_u2' ( temp 2-component vector of uint)
-0:61        AtomicAnd ( temp 2-component vector of uint)
-0:61          'gs_ua2' ( shared 2-component vector of uint)
-0:61          'gs_ub2' ( shared 2-component vector of uint)
-0:62      move second child to first child ( temp 2-component vector of uint)
-0:62        'out_u2' ( temp 2-component vector of uint)
-0:62        AtomicCompSwap ( temp 2-component vector of uint)
-0:62          'gs_ua2' ( shared 2-component vector of uint)
-0:62          'gs_ub2' ( shared 2-component vector of uint)
-0:62          'gs_uc2' ( shared 2-component vector of uint)
+0:59      all ( temp bool)
+0:59        Convert float to bool ( temp 2-component vector of bool)
+0:59          'inF0' ( in 2-component vector of float)
+0:62      AtomicAdd ( temp 2-component vector of uint)
+0:62        'gs_ua2' ( shared 2-component vector of uint)
+0:62        'gs_ub2' ( shared 2-component vector of uint)
 0:63      move second child to first child ( temp 2-component vector of uint)
 0:63        'out_u2' ( temp 2-component vector of uint)
-0:63        AtomicExchange ( temp 2-component vector of uint)
+0:63        AtomicAdd ( temp 2-component vector of uint)
 0:63          'gs_ua2' ( shared 2-component vector of uint)
 0:63          'gs_ub2' ( shared 2-component vector of uint)
-0:64      AtomicMax ( temp 2-component vector of uint)
+0:64      AtomicAnd ( temp 2-component vector of uint)
 0:64        'gs_ua2' ( shared 2-component vector of uint)
 0:64        'gs_ub2' ( shared 2-component vector of uint)
 0:65      move second child to first child ( temp 2-component vector of uint)
 0:65        'out_u2' ( temp 2-component vector of uint)
-0:65        AtomicMax ( temp 2-component vector of uint)
+0:65        AtomicAnd ( temp 2-component vector of uint)
 0:65          'gs_ua2' ( shared 2-component vector of uint)
 0:65          'gs_ub2' ( shared 2-component vector of uint)
-0:66      AtomicMin ( temp 2-component vector of uint)
-0:66        'gs_ua2' ( shared 2-component vector of uint)
-0:66        'gs_ub2' ( shared 2-component vector of uint)
+0:66      move second child to first child ( temp 2-component vector of uint)
+0:66        'out_u2' ( temp 2-component vector of uint)
+0:66        AtomicCompSwap ( temp 2-component vector of uint)
+0:66          'gs_ua2' ( shared 2-component vector of uint)
+0:66          'gs_ub2' ( shared 2-component vector of uint)
+0:66          'gs_uc2' ( shared 2-component vector of uint)
 0:67      move second child to first child ( temp 2-component vector of uint)
 0:67        'out_u2' ( temp 2-component vector of uint)
-0:67        AtomicMin ( temp 2-component vector of uint)
+0:67        AtomicExchange ( temp 2-component vector of uint)
 0:67          'gs_ua2' ( shared 2-component vector of uint)
 0:67          'gs_ub2' ( shared 2-component vector of uint)
-0:68      AtomicOr ( temp 2-component vector of uint)
+0:68      AtomicMax ( temp 2-component vector of uint)
 0:68        'gs_ua2' ( shared 2-component vector of uint)
 0:68        'gs_ub2' ( shared 2-component vector of uint)
 0:69      move second child to first child ( temp 2-component vector of uint)
 0:69        'out_u2' ( temp 2-component vector of uint)
-0:69        AtomicOr ( temp 2-component vector of uint)
+0:69        AtomicMax ( temp 2-component vector of uint)
 0:69          'gs_ua2' ( shared 2-component vector of uint)
 0:69          'gs_ub2' ( shared 2-component vector of uint)
-0:70      AtomicXor ( temp 2-component vector of uint)
+0:70      AtomicMin ( temp 2-component vector of uint)
 0:70        'gs_ua2' ( shared 2-component vector of uint)
 0:70        'gs_ub2' ( shared 2-component vector of uint)
 0:71      move second child to first child ( temp 2-component vector of uint)
 0:71        'out_u2' ( temp 2-component vector of uint)
-0:71        AtomicXor ( temp 2-component vector of uint)
+0:71        AtomicMin ( temp 2-component vector of uint)
 0:71          'gs_ua2' ( shared 2-component vector of uint)
 0:71          'gs_ub2' ( shared 2-component vector of uint)
-0:74      Branch: Return with expression
-0:74        Constant:
-0:74          1.000000
-0:74          2.000000
-0:78  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:78    Function Parameters: 
-0:78      'inF0' ( in 3-component vector of float)
-0:78      'inF1' ( in 3-component vector of float)
-0:78      'inF2' ( in 3-component vector of float)
-0:78      'inU0' ( in 3-component vector of uint)
-0:78      'inU1' ( in 3-component vector of uint)
+0:72      AtomicOr ( temp 2-component vector of uint)
+0:72        'gs_ua2' ( shared 2-component vector of uint)
+0:72        'gs_ub2' ( shared 2-component vector of uint)
+0:73      move second child to first child ( temp 2-component vector of uint)
+0:73        'out_u2' ( temp 2-component vector of uint)
+0:73        AtomicOr ( temp 2-component vector of uint)
+0:73          'gs_ua2' ( shared 2-component vector of uint)
+0:73          'gs_ub2' ( shared 2-component vector of uint)
+0:74      AtomicXor ( temp 2-component vector of uint)
+0:74        'gs_ua2' ( shared 2-component vector of uint)
+0:74        'gs_ub2' ( shared 2-component vector of uint)
+0:75      move second child to first child ( temp 2-component vector of uint)
+0:75        'out_u2' ( temp 2-component vector of uint)
+0:75        AtomicXor ( temp 2-component vector of uint)
+0:75          'gs_ua2' ( shared 2-component vector of uint)
+0:75          'gs_ub2' ( shared 2-component vector of uint)
+0:78      Branch: Return with expression
+0:78        Constant:
+0:78          1.000000
+0:78          2.000000
+0:82  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:82    Function Parameters: 
+0:82      'inF0' ( in 3-component vector of float)
+0:82      'inF1' ( in 3-component vector of float)
+0:82      'inF2' ( in 3-component vector of float)
+0:82      'inU0' ( in 3-component vector of uint)
+0:82      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:82      all ( temp bool)
-0:82        Convert float to bool ( temp 3-component vector of bool)
-0:82          'inF0' ( in 3-component vector of float)
-0:85      AtomicAdd ( temp 3-component vector of uint)
-0:85        'gs_ua3' ( shared 3-component vector of uint)
-0:85        'gs_ub3' ( shared 3-component vector of uint)
-0:86      move second child to first child ( temp 3-component vector of uint)
-0:86        'out_u3' ( temp 3-component vector of uint)
-0:86        AtomicAdd ( temp 3-component vector of uint)
-0:86          'gs_ua3' ( shared 3-component vector of uint)
-0:86          'gs_ub3' ( shared 3-component vector of uint)
-0:87      AtomicAnd ( temp 3-component vector of uint)
-0:87        'gs_ua3' ( shared 3-component vector of uint)
-0:87        'gs_ub3' ( shared 3-component vector of uint)
-0:88      move second child to first child ( temp 3-component vector of uint)
-0:88        'out_u3' ( temp 3-component vector of uint)
-0:88        AtomicAnd ( temp 3-component vector of uint)
-0:88          'gs_ua3' ( shared 3-component vector of uint)
-0:88          'gs_ub3' ( shared 3-component vector of uint)
-0:89      move second child to first child ( temp 3-component vector of uint)
-0:89        'out_u3' ( temp 3-component vector of uint)
-0:89        AtomicCompSwap ( temp 3-component vector of uint)
-0:89          'gs_ua3' ( shared 3-component vector of uint)
-0:89          'gs_ub3' ( shared 3-component vector of uint)
-0:89          'gs_uc3' ( shared 3-component vector of uint)
+0:86      all ( temp bool)
+0:86        Convert float to bool ( temp 3-component vector of bool)
+0:86          'inF0' ( in 3-component vector of float)
+0:89      AtomicAdd ( temp 3-component vector of uint)
+0:89        'gs_ua3' ( shared 3-component vector of uint)
+0:89        'gs_ub3' ( shared 3-component vector of uint)
 0:90      move second child to first child ( temp 3-component vector of uint)
 0:90        'out_u3' ( temp 3-component vector of uint)
-0:90        AtomicExchange ( temp 3-component vector of uint)
+0:90        AtomicAdd ( temp 3-component vector of uint)
 0:90          'gs_ua3' ( shared 3-component vector of uint)
 0:90          'gs_ub3' ( shared 3-component vector of uint)
-0:91      AtomicMax ( temp 3-component vector of uint)
+0:91      AtomicAnd ( temp 3-component vector of uint)
 0:91        'gs_ua3' ( shared 3-component vector of uint)
 0:91        'gs_ub3' ( shared 3-component vector of uint)
 0:92      move second child to first child ( temp 3-component vector of uint)
 0:92        'out_u3' ( temp 3-component vector of uint)
-0:92        AtomicMax ( temp 3-component vector of uint)
+0:92        AtomicAnd ( temp 3-component vector of uint)
 0:92          'gs_ua3' ( shared 3-component vector of uint)
 0:92          'gs_ub3' ( shared 3-component vector of uint)
-0:93      AtomicMin ( temp 3-component vector of uint)
-0:93        'gs_ua3' ( shared 3-component vector of uint)
-0:93        'gs_ub3' ( shared 3-component vector of uint)
+0:93      move second child to first child ( temp 3-component vector of uint)
+0:93        'out_u3' ( temp 3-component vector of uint)
+0:93        AtomicCompSwap ( temp 3-component vector of uint)
+0:93          'gs_ua3' ( shared 3-component vector of uint)
+0:93          'gs_ub3' ( shared 3-component vector of uint)
+0:93          'gs_uc3' ( shared 3-component vector of uint)
 0:94      move second child to first child ( temp 3-component vector of uint)
 0:94        'out_u3' ( temp 3-component vector of uint)
-0:94        AtomicMin ( temp 3-component vector of uint)
+0:94        AtomicExchange ( temp 3-component vector of uint)
 0:94          'gs_ua3' ( shared 3-component vector of uint)
 0:94          'gs_ub3' ( shared 3-component vector of uint)
-0:95      AtomicOr ( temp 3-component vector of uint)
+0:95      AtomicMax ( temp 3-component vector of uint)
 0:95        'gs_ua3' ( shared 3-component vector of uint)
 0:95        'gs_ub3' ( shared 3-component vector of uint)
 0:96      move second child to first child ( temp 3-component vector of uint)
 0:96        'out_u3' ( temp 3-component vector of uint)
-0:96        AtomicOr ( temp 3-component vector of uint)
+0:96        AtomicMax ( temp 3-component vector of uint)
 0:96          'gs_ua3' ( shared 3-component vector of uint)
 0:96          'gs_ub3' ( shared 3-component vector of uint)
-0:97      AtomicXor ( temp 3-component vector of uint)
+0:97      AtomicMin ( temp 3-component vector of uint)
 0:97        'gs_ua3' ( shared 3-component vector of uint)
 0:97        'gs_ub3' ( shared 3-component vector of uint)
 0:98      move second child to first child ( temp 3-component vector of uint)
 0:98        'out_u3' ( temp 3-component vector of uint)
-0:98        AtomicXor ( temp 3-component vector of uint)
+0:98        AtomicMin ( temp 3-component vector of uint)
 0:98          'gs_ua3' ( shared 3-component vector of uint)
 0:98          'gs_ub3' ( shared 3-component vector of uint)
-0:101      Branch: Return with expression
-0:101        Constant:
-0:101          1.000000
-0:101          2.000000
-0:101          3.000000
-0:105  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:105    Function Parameters: 
-0:105      'inF0' ( in 4-component vector of float)
-0:105      'inF1' ( in 4-component vector of float)
-0:105      'inF2' ( in 4-component vector of float)
-0:105      'inU0' ( in 4-component vector of uint)
-0:105      'inU1' ( in 4-component vector of uint)
+0:99      AtomicOr ( temp 3-component vector of uint)
+0:99        'gs_ua3' ( shared 3-component vector of uint)
+0:99        'gs_ub3' ( shared 3-component vector of uint)
+0:100      move second child to first child ( temp 3-component vector of uint)
+0:100        'out_u3' ( temp 3-component vector of uint)
+0:100        AtomicOr ( temp 3-component vector of uint)
+0:100          'gs_ua3' ( shared 3-component vector of uint)
+0:100          'gs_ub3' ( shared 3-component vector of uint)
+0:101      AtomicXor ( temp 3-component vector of uint)
+0:101        'gs_ua3' ( shared 3-component vector of uint)
+0:101        'gs_ub3' ( shared 3-component vector of uint)
+0:102      move second child to first child ( temp 3-component vector of uint)
+0:102        'out_u3' ( temp 3-component vector of uint)
+0:102        AtomicXor ( temp 3-component vector of uint)
+0:102          'gs_ua3' ( shared 3-component vector of uint)
+0:102          'gs_ub3' ( shared 3-component vector of uint)
+0:105      Branch: Return with expression
+0:105        Constant:
+0:105          1.000000
+0:105          2.000000
+0:105          3.000000
+0:109  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:109    Function Parameters: 
+0:109      'inF0' ( in 4-component vector of float)
+0:109      'inF1' ( in 4-component vector of float)
+0:109      'inF2' ( in 4-component vector of float)
+0:109      'inU0' ( in 4-component vector of uint)
+0:109      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:109      all ( temp bool)
-0:109        Convert float to bool ( temp 4-component vector of bool)
-0:109          'inF0' ( in 4-component vector of float)
-0:112      AtomicAdd ( temp 4-component vector of uint)
-0:112        'gs_ua4' ( shared 4-component vector of uint)
-0:112        'gs_ub4' ( shared 4-component vector of uint)
-0:113      move second child to first child ( temp 4-component vector of uint)
-0:113        'out_u4' ( temp 4-component vector of uint)
-0:113        AtomicAdd ( temp 4-component vector of uint)
-0:113          'gs_ua4' ( shared 4-component vector of uint)
-0:113          'gs_ub4' ( shared 4-component vector of uint)
-0:114      AtomicAnd ( temp 4-component vector of uint)
-0:114        'gs_ua4' ( shared 4-component vector of uint)
-0:114        'gs_ub4' ( shared 4-component vector of uint)
-0:115      move second child to first child ( temp 4-component vector of uint)
-0:115        'out_u4' ( temp 4-component vector of uint)
-0:115        AtomicAnd ( temp 4-component vector of uint)
-0:115          'gs_ua4' ( shared 4-component vector of uint)
-0:115          'gs_ub4' ( shared 4-component vector of uint)
-0:116      move second child to first child ( temp 4-component vector of uint)
-0:116        'out_u4' ( temp 4-component vector of uint)
-0:116        AtomicCompSwap ( temp 4-component vector of uint)
-0:116          'gs_ua4' ( shared 4-component vector of uint)
-0:116          'gs_ub4' ( shared 4-component vector of uint)
-0:116          'gs_uc4' ( shared 4-component vector of uint)
+0:113      all ( temp bool)
+0:113        Convert float to bool ( temp 4-component vector of bool)
+0:113          'inF0' ( in 4-component vector of float)
+0:116      AtomicAdd ( temp 4-component vector of uint)
+0:116        'gs_ua4' ( shared 4-component vector of uint)
+0:116        'gs_ub4' ( shared 4-component vector of uint)
 0:117      move second child to first child ( temp 4-component vector of uint)
 0:117        'out_u4' ( temp 4-component vector of uint)
-0:117        AtomicExchange ( temp 4-component vector of uint)
+0:117        AtomicAdd ( temp 4-component vector of uint)
 0:117          'gs_ua4' ( shared 4-component vector of uint)
 0:117          'gs_ub4' ( shared 4-component vector of uint)
-0:118      AtomicMax ( temp 4-component vector of uint)
+0:118      AtomicAnd ( temp 4-component vector of uint)
 0:118        'gs_ua4' ( shared 4-component vector of uint)
 0:118        'gs_ub4' ( shared 4-component vector of uint)
 0:119      move second child to first child ( temp 4-component vector of uint)
 0:119        'out_u4' ( temp 4-component vector of uint)
-0:119        AtomicMax ( temp 4-component vector of uint)
+0:119        AtomicAnd ( temp 4-component vector of uint)
 0:119          'gs_ua4' ( shared 4-component vector of uint)
 0:119          'gs_ub4' ( shared 4-component vector of uint)
-0:120      AtomicMin ( temp 4-component vector of uint)
-0:120        'gs_ua4' ( shared 4-component vector of uint)
-0:120        'gs_ub4' ( shared 4-component vector of uint)
+0:120      move second child to first child ( temp 4-component vector of uint)
+0:120        'out_u4' ( temp 4-component vector of uint)
+0:120        AtomicCompSwap ( temp 4-component vector of uint)
+0:120          'gs_ua4' ( shared 4-component vector of uint)
+0:120          'gs_ub4' ( shared 4-component vector of uint)
+0:120          'gs_uc4' ( shared 4-component vector of uint)
 0:121      move second child to first child ( temp 4-component vector of uint)
 0:121        'out_u4' ( temp 4-component vector of uint)
-0:121        AtomicMin ( temp 4-component vector of uint)
+0:121        AtomicExchange ( temp 4-component vector of uint)
 0:121          'gs_ua4' ( shared 4-component vector of uint)
 0:121          'gs_ub4' ( shared 4-component vector of uint)
-0:122      AtomicOr ( temp 4-component vector of uint)
+0:122      AtomicMax ( temp 4-component vector of uint)
 0:122        'gs_ua4' ( shared 4-component vector of uint)
 0:122        'gs_ub4' ( shared 4-component vector of uint)
 0:123      move second child to first child ( temp 4-component vector of uint)
 0:123        'out_u4' ( temp 4-component vector of uint)
-0:123        AtomicOr ( temp 4-component vector of uint)
+0:123        AtomicMax ( temp 4-component vector of uint)
 0:123          'gs_ua4' ( shared 4-component vector of uint)
 0:123          'gs_ub4' ( shared 4-component vector of uint)
-0:124      AtomicXor ( temp 4-component vector of uint)
+0:124      AtomicMin ( temp 4-component vector of uint)
 0:124        'gs_ua4' ( shared 4-component vector of uint)
 0:124        'gs_ub4' ( shared 4-component vector of uint)
 0:125      move second child to first child ( temp 4-component vector of uint)
 0:125        'out_u4' ( temp 4-component vector of uint)
-0:125        AtomicXor ( temp 4-component vector of uint)
+0:125        AtomicMin ( temp 4-component vector of uint)
 0:125          'gs_ua4' ( shared 4-component vector of uint)
 0:125          'gs_ub4' ( shared 4-component vector of uint)
-0:128      Branch: Return with expression
-0:128        Constant:
-0:128          1.000000
-0:128          2.000000
-0:128          3.000000
-0:128          4.000000
-0:105  Function Definition: ComputeShaderFunction( ( temp void)
-0:105    Function Parameters: 
+0:126      AtomicOr ( temp 4-component vector of uint)
+0:126        'gs_ua4' ( shared 4-component vector of uint)
+0:126        'gs_ub4' ( shared 4-component vector of uint)
+0:127      move second child to first child ( temp 4-component vector of uint)
+0:127        'out_u4' ( temp 4-component vector of uint)
+0:127        AtomicOr ( temp 4-component vector of uint)
+0:127          'gs_ua4' ( shared 4-component vector of uint)
+0:127          'gs_ub4' ( shared 4-component vector of uint)
+0:128      AtomicXor ( temp 4-component vector of uint)
+0:128        'gs_ua4' ( shared 4-component vector of uint)
+0:128        'gs_ub4' ( shared 4-component vector of uint)
+0:129      move second child to first child ( temp 4-component vector of uint)
+0:129        'out_u4' ( temp 4-component vector of uint)
+0:129        AtomicXor ( temp 4-component vector of uint)
+0:129          'gs_ua4' ( shared 4-component vector of uint)
+0:129          'gs_ub4' ( shared 4-component vector of uint)
+0:132      Branch: Return with expression
+0:132        Constant:
+0:132          1.000000
+0:132          2.000000
+0:132          3.000000
+0:132          4.000000
+0:109  Function Definition: ComputeShaderFunction( ( temp void)
+0:109    Function Parameters: 
 0:?     Sequence
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         'inF0' ( temp 4-component vector of float)
 0:?         'inF0' (layout( location=0) in 4-component vector of float)
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         'inF1' ( temp 4-component vector of float)
 0:?         'inF1' (layout( location=1) in 4-component vector of float)
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         'inF2' ( temp 4-component vector of float)
 0:?         'inF2' (layout( location=2) in 4-component vector of float)
-0:105      move second child to first child ( temp 4-component vector of uint)
+0:109      move second child to first child ( temp 4-component vector of uint)
 0:?         'inU0' ( temp 4-component vector of uint)
 0:?         'inU0' (layout( location=3) in 4-component vector of uint)
-0:105      move second child to first child ( temp 4-component vector of uint)
+0:109      move second child to first child ( temp 4-component vector of uint)
 0:?         'inU1' ( temp 4-component vector of uint)
 0:?         'inU1' (layout( location=4) in 4-component vector of uint)
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:105        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:109        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
 0:?           'inF0' ( temp 4-component vector of float)
 0:?           'inF1' ( temp 4-component vector of float)
 0:?           'inF2' ( temp 4-component vector of float)
@@ -348,6 +351,8 @@
 0:?     'gs_ua4' ( shared 4-component vector of uint)
 0:?     'gs_ub4' ( shared 4-component vector of uint)
 0:?     'gs_uc4' ( shared 4-component vector of uint)
+0:?     'gs_fa' ( shared float)
+0:?     'gs_fb' ( shared float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'inF0' (layout( location=0) in 4-component vector of float)
 0:?     'inF1' (layout( location=1) in 4-component vector of float)
@@ -362,334 +367,337 @@
 Shader version: 500
 local_size = (1, 1, 1)
 0:? Sequence
-0:17  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
-0:17    Function Parameters: 
-0:17      'inF0' ( in float)
-0:17      'inF1' ( in float)
-0:17      'inF2' ( in float)
-0:17      'inU0' ( in uint)
-0:17      'inU1' ( in uint)
+0:19  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; ( temp float)
+0:19    Function Parameters: 
+0:19      'inF0' ( in float)
+0:19      'inF1' ( in float)
+0:19      'inF2' ( in float)
+0:19      'inU0' ( in uint)
+0:19      'inU1' ( in uint)
 0:?     Sequence
-0:21      all ( temp bool)
-0:21        Convert float to bool ( temp bool)
-0:21          'inF0' ( in float)
-0:24      AtomicAdd ( temp uint)
-0:24        'gs_ua' ( shared uint)
-0:24        'gs_ub' ( shared uint)
-0:25      move second child to first child ( temp uint)
-0:25        'out_u1' ( temp uint)
-0:25        AtomicAdd ( temp uint)
-0:25          'gs_ua' ( shared uint)
-0:25          'gs_ub' ( shared uint)
-0:26      AtomicAnd ( temp uint)
+0:23      all ( temp bool)
+0:23        Convert float to bool ( temp bool)
+0:23          'inF0' ( in float)
+0:26      AtomicAdd ( temp uint)
 0:26        'gs_ua' ( shared uint)
 0:26        'gs_ub' ( shared uint)
 0:27      move second child to first child ( temp uint)
 0:27        'out_u1' ( temp uint)
-0:27        AtomicAnd ( temp uint)
+0:27        AtomicAdd ( temp uint)
 0:27          'gs_ua' ( shared uint)
 0:27          'gs_ub' ( shared uint)
-0:28      move second child to first child ( temp uint)
-0:28        'out_u1' ( temp uint)
-0:28        AtomicCompSwap ( temp uint)
-0:28          'gs_ua' ( shared uint)
-0:28          'gs_ub' ( shared uint)
-0:28          'gs_uc' ( shared uint)
+0:28      AtomicAnd ( temp uint)
+0:28        'gs_ua' ( shared uint)
+0:28        'gs_ub' ( shared uint)
 0:29      move second child to first child ( temp uint)
 0:29        'out_u1' ( temp uint)
-0:29        AtomicExchange ( temp uint)
+0:29        AtomicAnd ( temp uint)
 0:29          'gs_ua' ( shared uint)
 0:29          'gs_ub' ( shared uint)
-0:30      AtomicMax ( temp uint)
-0:30        'gs_ua' ( shared uint)
-0:30        'gs_ub' ( shared uint)
+0:30      move second child to first child ( temp uint)
+0:30        'out_u1' ( temp uint)
+0:30        AtomicCompSwap ( temp uint)
+0:30          'gs_ua' ( shared uint)
+0:30          'gs_ub' ( shared uint)
+0:30          'gs_uc' ( shared uint)
 0:31      move second child to first child ( temp uint)
 0:31        'out_u1' ( temp uint)
-0:31        AtomicMax ( temp uint)
+0:31        AtomicExchange ( temp uint)
 0:31          'gs_ua' ( shared uint)
 0:31          'gs_ub' ( shared uint)
-0:32      AtomicMin ( temp uint)
+0:32      AtomicMax ( temp uint)
 0:32        'gs_ua' ( shared uint)
 0:32        'gs_ub' ( shared uint)
 0:33      move second child to first child ( temp uint)
 0:33        'out_u1' ( temp uint)
-0:33        AtomicMin ( temp uint)
+0:33        AtomicMax ( temp uint)
 0:33          'gs_ua' ( shared uint)
 0:33          'gs_ub' ( shared uint)
-0:34      AtomicOr ( temp uint)
+0:34      AtomicMin ( temp uint)
 0:34        'gs_ua' ( shared uint)
 0:34        'gs_ub' ( shared uint)
 0:35      move second child to first child ( temp uint)
 0:35        'out_u1' ( temp uint)
-0:35        AtomicOr ( temp uint)
+0:35        AtomicMin ( temp uint)
 0:35          'gs_ua' ( shared uint)
 0:35          'gs_ub' ( shared uint)
-0:36      AtomicXor ( temp uint)
+0:36      AtomicOr ( temp uint)
 0:36        'gs_ua' ( shared uint)
 0:36        'gs_ub' ( shared uint)
 0:37      move second child to first child ( temp uint)
 0:37        'out_u1' ( temp uint)
-0:37        AtomicXor ( temp uint)
+0:37        AtomicOr ( temp uint)
 0:37          'gs_ua' ( shared uint)
 0:37          'gs_ub' ( shared uint)
-0:41      Branch: Return with expression
-0:41        Constant:
-0:41          0.000000
-0:45  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
-0:45    Function Parameters: 
-0:45      'inF0' ( in 1-component vector of float)
-0:45      'inF1' ( in 1-component vector of float)
-0:45      'inF2' ( in 1-component vector of float)
+0:38      AtomicXor ( temp uint)
+0:38        'gs_ua' ( shared uint)
+0:38        'gs_ub' ( shared uint)
+0:39      move second child to first child ( temp uint)
+0:39        'out_u1' ( temp uint)
+0:39        AtomicXor ( temp uint)
+0:39          'gs_ua' ( shared uint)
+0:39          'gs_ub' ( shared uint)
+0:41      AtomicAdd ( temp float)
+0:41        'gs_fa' ( shared float)
+0:41        'gs_fb' ( shared float)
+0:45      Branch: Return with expression
+0:45        Constant:
+0:45          0.000000
+0:49  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; ( temp 1-component vector of float)
+0:49    Function Parameters: 
+0:49      'inF0' ( in 1-component vector of float)
+0:49      'inF1' ( in 1-component vector of float)
+0:49      'inF2' ( in 1-component vector of float)
 0:?     Sequence
-0:47      Branch: Return with expression
-0:47        Constant:
-0:47          0.000000
-0:51  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
-0:51    Function Parameters: 
-0:51      'inF0' ( in 2-component vector of float)
-0:51      'inF1' ( in 2-component vector of float)
-0:51      'inF2' ( in 2-component vector of float)
-0:51      'inU0' ( in 2-component vector of uint)
-0:51      'inU1' ( in 2-component vector of uint)
+0:51      Branch: Return with expression
+0:51        Constant:
+0:51          0.000000
+0:55  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; ( temp 2-component vector of float)
+0:55    Function Parameters: 
+0:55      'inF0' ( in 2-component vector of float)
+0:55      'inF1' ( in 2-component vector of float)
+0:55      'inF2' ( in 2-component vector of float)
+0:55      'inU0' ( in 2-component vector of uint)
+0:55      'inU1' ( in 2-component vector of uint)
 0:?     Sequence
-0:55      all ( temp bool)
-0:55        Convert float to bool ( temp 2-component vector of bool)
-0:55          'inF0' ( in 2-component vector of float)
-0:58      AtomicAdd ( temp 2-component vector of uint)
-0:58        'gs_ua2' ( shared 2-component vector of uint)
-0:58        'gs_ub2' ( shared 2-component vector of uint)
-0:59      move second child to first child ( temp 2-component vector of uint)
-0:59        'out_u2' ( temp 2-component vector of uint)
-0:59        AtomicAdd ( temp 2-component vector of uint)
-0:59          'gs_ua2' ( shared 2-component vector of uint)
-0:59          'gs_ub2' ( shared 2-component vector of uint)
-0:60      AtomicAnd ( temp 2-component vector of uint)
-0:60        'gs_ua2' ( shared 2-component vector of uint)
-0:60        'gs_ub2' ( shared 2-component vector of uint)
-0:61      move second child to first child ( temp 2-component vector of uint)
-0:61        'out_u2' ( temp 2-component vector of uint)
-0:61        AtomicAnd ( temp 2-component vector of uint)
-0:61          'gs_ua2' ( shared 2-component vector of uint)
-0:61          'gs_ub2' ( shared 2-component vector of uint)
-0:62      move second child to first child ( temp 2-component vector of uint)
-0:62        'out_u2' ( temp 2-component vector of uint)
-0:62        AtomicCompSwap ( temp 2-component vector of uint)
-0:62          'gs_ua2' ( shared 2-component vector of uint)
-0:62          'gs_ub2' ( shared 2-component vector of uint)
-0:62          'gs_uc2' ( shared 2-component vector of uint)
+0:59      all ( temp bool)
+0:59        Convert float to bool ( temp 2-component vector of bool)
+0:59          'inF0' ( in 2-component vector of float)
+0:62      AtomicAdd ( temp 2-component vector of uint)
+0:62        'gs_ua2' ( shared 2-component vector of uint)
+0:62        'gs_ub2' ( shared 2-component vector of uint)
 0:63      move second child to first child ( temp 2-component vector of uint)
 0:63        'out_u2' ( temp 2-component vector of uint)
-0:63        AtomicExchange ( temp 2-component vector of uint)
+0:63        AtomicAdd ( temp 2-component vector of uint)
 0:63          'gs_ua2' ( shared 2-component vector of uint)
 0:63          'gs_ub2' ( shared 2-component vector of uint)
-0:64      AtomicMax ( temp 2-component vector of uint)
+0:64      AtomicAnd ( temp 2-component vector of uint)
 0:64        'gs_ua2' ( shared 2-component vector of uint)
 0:64        'gs_ub2' ( shared 2-component vector of uint)
 0:65      move second child to first child ( temp 2-component vector of uint)
 0:65        'out_u2' ( temp 2-component vector of uint)
-0:65        AtomicMax ( temp 2-component vector of uint)
+0:65        AtomicAnd ( temp 2-component vector of uint)
 0:65          'gs_ua2' ( shared 2-component vector of uint)
 0:65          'gs_ub2' ( shared 2-component vector of uint)
-0:66      AtomicMin ( temp 2-component vector of uint)
-0:66        'gs_ua2' ( shared 2-component vector of uint)
-0:66        'gs_ub2' ( shared 2-component vector of uint)
+0:66      move second child to first child ( temp 2-component vector of uint)
+0:66        'out_u2' ( temp 2-component vector of uint)
+0:66        AtomicCompSwap ( temp 2-component vector of uint)
+0:66          'gs_ua2' ( shared 2-component vector of uint)
+0:66          'gs_ub2' ( shared 2-component vector of uint)
+0:66          'gs_uc2' ( shared 2-component vector of uint)
 0:67      move second child to first child ( temp 2-component vector of uint)
 0:67        'out_u2' ( temp 2-component vector of uint)
-0:67        AtomicMin ( temp 2-component vector of uint)
+0:67        AtomicExchange ( temp 2-component vector of uint)
 0:67          'gs_ua2' ( shared 2-component vector of uint)
 0:67          'gs_ub2' ( shared 2-component vector of uint)
-0:68      AtomicOr ( temp 2-component vector of uint)
+0:68      AtomicMax ( temp 2-component vector of uint)
 0:68        'gs_ua2' ( shared 2-component vector of uint)
 0:68        'gs_ub2' ( shared 2-component vector of uint)
 0:69      move second child to first child ( temp 2-component vector of uint)
 0:69        'out_u2' ( temp 2-component vector of uint)
-0:69        AtomicOr ( temp 2-component vector of uint)
+0:69        AtomicMax ( temp 2-component vector of uint)
 0:69          'gs_ua2' ( shared 2-component vector of uint)
 0:69          'gs_ub2' ( shared 2-component vector of uint)
-0:70      AtomicXor ( temp 2-component vector of uint)
+0:70      AtomicMin ( temp 2-component vector of uint)
 0:70        'gs_ua2' ( shared 2-component vector of uint)
 0:70        'gs_ub2' ( shared 2-component vector of uint)
 0:71      move second child to first child ( temp 2-component vector of uint)
 0:71        'out_u2' ( temp 2-component vector of uint)
-0:71        AtomicXor ( temp 2-component vector of uint)
+0:71        AtomicMin ( temp 2-component vector of uint)
 0:71          'gs_ua2' ( shared 2-component vector of uint)
 0:71          'gs_ub2' ( shared 2-component vector of uint)
-0:74      Branch: Return with expression
-0:74        Constant:
-0:74          1.000000
-0:74          2.000000
-0:78  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
-0:78    Function Parameters: 
-0:78      'inF0' ( in 3-component vector of float)
-0:78      'inF1' ( in 3-component vector of float)
-0:78      'inF2' ( in 3-component vector of float)
-0:78      'inU0' ( in 3-component vector of uint)
-0:78      'inU1' ( in 3-component vector of uint)
+0:72      AtomicOr ( temp 2-component vector of uint)
+0:72        'gs_ua2' ( shared 2-component vector of uint)
+0:72        'gs_ub2' ( shared 2-component vector of uint)
+0:73      move second child to first child ( temp 2-component vector of uint)
+0:73        'out_u2' ( temp 2-component vector of uint)
+0:73        AtomicOr ( temp 2-component vector of uint)
+0:73          'gs_ua2' ( shared 2-component vector of uint)
+0:73          'gs_ub2' ( shared 2-component vector of uint)
+0:74      AtomicXor ( temp 2-component vector of uint)
+0:74        'gs_ua2' ( shared 2-component vector of uint)
+0:74        'gs_ub2' ( shared 2-component vector of uint)
+0:75      move second child to first child ( temp 2-component vector of uint)
+0:75        'out_u2' ( temp 2-component vector of uint)
+0:75        AtomicXor ( temp 2-component vector of uint)
+0:75          'gs_ua2' ( shared 2-component vector of uint)
+0:75          'gs_ub2' ( shared 2-component vector of uint)
+0:78      Branch: Return with expression
+0:78        Constant:
+0:78          1.000000
+0:78          2.000000
+0:82  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float)
+0:82    Function Parameters: 
+0:82      'inF0' ( in 3-component vector of float)
+0:82      'inF1' ( in 3-component vector of float)
+0:82      'inF2' ( in 3-component vector of float)
+0:82      'inU0' ( in 3-component vector of uint)
+0:82      'inU1' ( in 3-component vector of uint)
 0:?     Sequence
-0:82      all ( temp bool)
-0:82        Convert float to bool ( temp 3-component vector of bool)
-0:82          'inF0' ( in 3-component vector of float)
-0:85      AtomicAdd ( temp 3-component vector of uint)
-0:85        'gs_ua3' ( shared 3-component vector of uint)
-0:85        'gs_ub3' ( shared 3-component vector of uint)
-0:86      move second child to first child ( temp 3-component vector of uint)
-0:86        'out_u3' ( temp 3-component vector of uint)
-0:86        AtomicAdd ( temp 3-component vector of uint)
-0:86          'gs_ua3' ( shared 3-component vector of uint)
-0:86          'gs_ub3' ( shared 3-component vector of uint)
-0:87      AtomicAnd ( temp 3-component vector of uint)
-0:87        'gs_ua3' ( shared 3-component vector of uint)
-0:87        'gs_ub3' ( shared 3-component vector of uint)
-0:88      move second child to first child ( temp 3-component vector of uint)
-0:88        'out_u3' ( temp 3-component vector of uint)
-0:88        AtomicAnd ( temp 3-component vector of uint)
-0:88          'gs_ua3' ( shared 3-component vector of uint)
-0:88          'gs_ub3' ( shared 3-component vector of uint)
-0:89      move second child to first child ( temp 3-component vector of uint)
-0:89        'out_u3' ( temp 3-component vector of uint)
-0:89        AtomicCompSwap ( temp 3-component vector of uint)
-0:89          'gs_ua3' ( shared 3-component vector of uint)
-0:89          'gs_ub3' ( shared 3-component vector of uint)
-0:89          'gs_uc3' ( shared 3-component vector of uint)
+0:86      all ( temp bool)
+0:86        Convert float to bool ( temp 3-component vector of bool)
+0:86          'inF0' ( in 3-component vector of float)
+0:89      AtomicAdd ( temp 3-component vector of uint)
+0:89        'gs_ua3' ( shared 3-component vector of uint)
+0:89        'gs_ub3' ( shared 3-component vector of uint)
 0:90      move second child to first child ( temp 3-component vector of uint)
 0:90        'out_u3' ( temp 3-component vector of uint)
-0:90        AtomicExchange ( temp 3-component vector of uint)
+0:90        AtomicAdd ( temp 3-component vector of uint)
 0:90          'gs_ua3' ( shared 3-component vector of uint)
 0:90          'gs_ub3' ( shared 3-component vector of uint)
-0:91      AtomicMax ( temp 3-component vector of uint)
+0:91      AtomicAnd ( temp 3-component vector of uint)
 0:91        'gs_ua3' ( shared 3-component vector of uint)
 0:91        'gs_ub3' ( shared 3-component vector of uint)
 0:92      move second child to first child ( temp 3-component vector of uint)
 0:92        'out_u3' ( temp 3-component vector of uint)
-0:92        AtomicMax ( temp 3-component vector of uint)
+0:92        AtomicAnd ( temp 3-component vector of uint)
 0:92          'gs_ua3' ( shared 3-component vector of uint)
 0:92          'gs_ub3' ( shared 3-component vector of uint)
-0:93      AtomicMin ( temp 3-component vector of uint)
-0:93        'gs_ua3' ( shared 3-component vector of uint)
-0:93        'gs_ub3' ( shared 3-component vector of uint)
+0:93      move second child to first child ( temp 3-component vector of uint)
+0:93        'out_u3' ( temp 3-component vector of uint)
+0:93        AtomicCompSwap ( temp 3-component vector of uint)
+0:93          'gs_ua3' ( shared 3-component vector of uint)
+0:93          'gs_ub3' ( shared 3-component vector of uint)
+0:93          'gs_uc3' ( shared 3-component vector of uint)
 0:94      move second child to first child ( temp 3-component vector of uint)
 0:94        'out_u3' ( temp 3-component vector of uint)
-0:94        AtomicMin ( temp 3-component vector of uint)
+0:94        AtomicExchange ( temp 3-component vector of uint)
 0:94          'gs_ua3' ( shared 3-component vector of uint)
 0:94          'gs_ub3' ( shared 3-component vector of uint)
-0:95      AtomicOr ( temp 3-component vector of uint)
+0:95      AtomicMax ( temp 3-component vector of uint)
 0:95        'gs_ua3' ( shared 3-component vector of uint)
 0:95        'gs_ub3' ( shared 3-component vector of uint)
 0:96      move second child to first child ( temp 3-component vector of uint)
 0:96        'out_u3' ( temp 3-component vector of uint)
-0:96        AtomicOr ( temp 3-component vector of uint)
+0:96        AtomicMax ( temp 3-component vector of uint)
 0:96          'gs_ua3' ( shared 3-component vector of uint)
 0:96          'gs_ub3' ( shared 3-component vector of uint)
-0:97      AtomicXor ( temp 3-component vector of uint)
+0:97      AtomicMin ( temp 3-component vector of uint)
 0:97        'gs_ua3' ( shared 3-component vector of uint)
 0:97        'gs_ub3' ( shared 3-component vector of uint)
 0:98      move second child to first child ( temp 3-component vector of uint)
 0:98        'out_u3' ( temp 3-component vector of uint)
-0:98        AtomicXor ( temp 3-component vector of uint)
+0:98        AtomicMin ( temp 3-component vector of uint)
 0:98          'gs_ua3' ( shared 3-component vector of uint)
 0:98          'gs_ub3' ( shared 3-component vector of uint)
-0:101      Branch: Return with expression
-0:101        Constant:
-0:101          1.000000
-0:101          2.000000
-0:101          3.000000
-0:105  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
-0:105    Function Parameters: 
-0:105      'inF0' ( in 4-component vector of float)
-0:105      'inF1' ( in 4-component vector of float)
-0:105      'inF2' ( in 4-component vector of float)
-0:105      'inU0' ( in 4-component vector of uint)
-0:105      'inU1' ( in 4-component vector of uint)
+0:99      AtomicOr ( temp 3-component vector of uint)
+0:99        'gs_ua3' ( shared 3-component vector of uint)
+0:99        'gs_ub3' ( shared 3-component vector of uint)
+0:100      move second child to first child ( temp 3-component vector of uint)
+0:100        'out_u3' ( temp 3-component vector of uint)
+0:100        AtomicOr ( temp 3-component vector of uint)
+0:100          'gs_ua3' ( shared 3-component vector of uint)
+0:100          'gs_ub3' ( shared 3-component vector of uint)
+0:101      AtomicXor ( temp 3-component vector of uint)
+0:101        'gs_ua3' ( shared 3-component vector of uint)
+0:101        'gs_ub3' ( shared 3-component vector of uint)
+0:102      move second child to first child ( temp 3-component vector of uint)
+0:102        'out_u3' ( temp 3-component vector of uint)
+0:102        AtomicXor ( temp 3-component vector of uint)
+0:102          'gs_ua3' ( shared 3-component vector of uint)
+0:102          'gs_ub3' ( shared 3-component vector of uint)
+0:105      Branch: Return with expression
+0:105        Constant:
+0:105          1.000000
+0:105          2.000000
+0:105          3.000000
+0:109  Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:109    Function Parameters: 
+0:109      'inF0' ( in 4-component vector of float)
+0:109      'inF1' ( in 4-component vector of float)
+0:109      'inF2' ( in 4-component vector of float)
+0:109      'inU0' ( in 4-component vector of uint)
+0:109      'inU1' ( in 4-component vector of uint)
 0:?     Sequence
-0:109      all ( temp bool)
-0:109        Convert float to bool ( temp 4-component vector of bool)
-0:109          'inF0' ( in 4-component vector of float)
-0:112      AtomicAdd ( temp 4-component vector of uint)
-0:112        'gs_ua4' ( shared 4-component vector of uint)
-0:112        'gs_ub4' ( shared 4-component vector of uint)
-0:113      move second child to first child ( temp 4-component vector of uint)
-0:113        'out_u4' ( temp 4-component vector of uint)
-0:113        AtomicAdd ( temp 4-component vector of uint)
-0:113          'gs_ua4' ( shared 4-component vector of uint)
-0:113          'gs_ub4' ( shared 4-component vector of uint)
-0:114      AtomicAnd ( temp 4-component vector of uint)
-0:114        'gs_ua4' ( shared 4-component vector of uint)
-0:114        'gs_ub4' ( shared 4-component vector of uint)
-0:115      move second child to first child ( temp 4-component vector of uint)
-0:115        'out_u4' ( temp 4-component vector of uint)
-0:115        AtomicAnd ( temp 4-component vector of uint)
-0:115          'gs_ua4' ( shared 4-component vector of uint)
-0:115          'gs_ub4' ( shared 4-component vector of uint)
-0:116      move second child to first child ( temp 4-component vector of uint)
-0:116        'out_u4' ( temp 4-component vector of uint)
-0:116        AtomicCompSwap ( temp 4-component vector of uint)
-0:116          'gs_ua4' ( shared 4-component vector of uint)
-0:116          'gs_ub4' ( shared 4-component vector of uint)
-0:116          'gs_uc4' ( shared 4-component vector of uint)
+0:113      all ( temp bool)
+0:113        Convert float to bool ( temp 4-component vector of bool)
+0:113          'inF0' ( in 4-component vector of float)
+0:116      AtomicAdd ( temp 4-component vector of uint)
+0:116        'gs_ua4' ( shared 4-component vector of uint)
+0:116        'gs_ub4' ( shared 4-component vector of uint)
 0:117      move second child to first child ( temp 4-component vector of uint)
 0:117        'out_u4' ( temp 4-component vector of uint)
-0:117        AtomicExchange ( temp 4-component vector of uint)
+0:117        AtomicAdd ( temp 4-component vector of uint)
 0:117          'gs_ua4' ( shared 4-component vector of uint)
 0:117          'gs_ub4' ( shared 4-component vector of uint)
-0:118      AtomicMax ( temp 4-component vector of uint)
+0:118      AtomicAnd ( temp 4-component vector of uint)
 0:118        'gs_ua4' ( shared 4-component vector of uint)
 0:118        'gs_ub4' ( shared 4-component vector of uint)
 0:119      move second child to first child ( temp 4-component vector of uint)
 0:119        'out_u4' ( temp 4-component vector of uint)
-0:119        AtomicMax ( temp 4-component vector of uint)
+0:119        AtomicAnd ( temp 4-component vector of uint)
 0:119          'gs_ua4' ( shared 4-component vector of uint)
 0:119          'gs_ub4' ( shared 4-component vector of uint)
-0:120      AtomicMin ( temp 4-component vector of uint)
-0:120        'gs_ua4' ( shared 4-component vector of uint)
-0:120        'gs_ub4' ( shared 4-component vector of uint)
+0:120      move second child to first child ( temp 4-component vector of uint)
+0:120        'out_u4' ( temp 4-component vector of uint)
+0:120        AtomicCompSwap ( temp 4-component vector of uint)
+0:120          'gs_ua4' ( shared 4-component vector of uint)
+0:120          'gs_ub4' ( shared 4-component vector of uint)
+0:120          'gs_uc4' ( shared 4-component vector of uint)
 0:121      move second child to first child ( temp 4-component vector of uint)
 0:121        'out_u4' ( temp 4-component vector of uint)
-0:121        AtomicMin ( temp 4-component vector of uint)
+0:121        AtomicExchange ( temp 4-component vector of uint)
 0:121          'gs_ua4' ( shared 4-component vector of uint)
 0:121          'gs_ub4' ( shared 4-component vector of uint)
-0:122      AtomicOr ( temp 4-component vector of uint)
+0:122      AtomicMax ( temp 4-component vector of uint)
 0:122        'gs_ua4' ( shared 4-component vector of uint)
 0:122        'gs_ub4' ( shared 4-component vector of uint)
 0:123      move second child to first child ( temp 4-component vector of uint)
 0:123        'out_u4' ( temp 4-component vector of uint)
-0:123        AtomicOr ( temp 4-component vector of uint)
+0:123        AtomicMax ( temp 4-component vector of uint)
 0:123          'gs_ua4' ( shared 4-component vector of uint)
 0:123          'gs_ub4' ( shared 4-component vector of uint)
-0:124      AtomicXor ( temp 4-component vector of uint)
+0:124      AtomicMin ( temp 4-component vector of uint)
 0:124        'gs_ua4' ( shared 4-component vector of uint)
 0:124        'gs_ub4' ( shared 4-component vector of uint)
 0:125      move second child to first child ( temp 4-component vector of uint)
 0:125        'out_u4' ( temp 4-component vector of uint)
-0:125        AtomicXor ( temp 4-component vector of uint)
+0:125        AtomicMin ( temp 4-component vector of uint)
 0:125          'gs_ua4' ( shared 4-component vector of uint)
 0:125          'gs_ub4' ( shared 4-component vector of uint)
-0:128      Branch: Return with expression
-0:128        Constant:
-0:128          1.000000
-0:128          2.000000
-0:128          3.000000
-0:128          4.000000
-0:105  Function Definition: ComputeShaderFunction( ( temp void)
-0:105    Function Parameters: 
+0:126      AtomicOr ( temp 4-component vector of uint)
+0:126        'gs_ua4' ( shared 4-component vector of uint)
+0:126        'gs_ub4' ( shared 4-component vector of uint)
+0:127      move second child to first child ( temp 4-component vector of uint)
+0:127        'out_u4' ( temp 4-component vector of uint)
+0:127        AtomicOr ( temp 4-component vector of uint)
+0:127          'gs_ua4' ( shared 4-component vector of uint)
+0:127          'gs_ub4' ( shared 4-component vector of uint)
+0:128      AtomicXor ( temp 4-component vector of uint)
+0:128        'gs_ua4' ( shared 4-component vector of uint)
+0:128        'gs_ub4' ( shared 4-component vector of uint)
+0:129      move second child to first child ( temp 4-component vector of uint)
+0:129        'out_u4' ( temp 4-component vector of uint)
+0:129        AtomicXor ( temp 4-component vector of uint)
+0:129          'gs_ua4' ( shared 4-component vector of uint)
+0:129          'gs_ub4' ( shared 4-component vector of uint)
+0:132      Branch: Return with expression
+0:132        Constant:
+0:132          1.000000
+0:132          2.000000
+0:132          3.000000
+0:132          4.000000
+0:109  Function Definition: ComputeShaderFunction( ( temp void)
+0:109    Function Parameters: 
 0:?     Sequence
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         'inF0' ( temp 4-component vector of float)
 0:?         'inF0' (layout( location=0) in 4-component vector of float)
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         'inF1' ( temp 4-component vector of float)
 0:?         'inF1' (layout( location=1) in 4-component vector of float)
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         'inF2' ( temp 4-component vector of float)
 0:?         'inF2' (layout( location=2) in 4-component vector of float)
-0:105      move second child to first child ( temp 4-component vector of uint)
+0:109      move second child to first child ( temp 4-component vector of uint)
 0:?         'inU0' ( temp 4-component vector of uint)
 0:?         'inU0' (layout( location=3) in 4-component vector of uint)
-0:105      move second child to first child ( temp 4-component vector of uint)
+0:109      move second child to first child ( temp 4-component vector of uint)
 0:?         'inU1' ( temp 4-component vector of uint)
 0:?         'inU1' (layout( location=4) in 4-component vector of uint)
-0:105      move second child to first child ( temp 4-component vector of float)
+0:109      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:105        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
+0:109        Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float)
 0:?           'inF0' ( temp 4-component vector of float)
 0:?           'inF1' ( temp 4-component vector of float)
 0:?           'inF2' ( temp 4-component vector of float)
@@ -708,6 +716,8 @@
 0:?     'gs_ua4' ( shared 4-component vector of uint)
 0:?     'gs_ub4' ( shared 4-component vector of uint)
 0:?     'gs_uc4' ( shared 4-component vector of uint)
+0:?     'gs_fa' ( shared float)
+0:?     'gs_fb' ( shared float)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'inF0' (layout( location=0) in 4-component vector of float)
 0:?     'inF1' (layout( location=1) in 4-component vector of float)
@@ -718,12 +728,14 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 265
+// Id's are bound by 270
 
                               Capability Shader
+                              Capability AtomicFloat32AddEXT
+                              Extension  "SPV_EXT_shader_atomic_float_add"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 237 240 243 247 250 253
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 242 245 248 252 255 258
                               ExecutionMode 4 LocalSize 1 1 1
                               Source HLSL 500
                               Name 4  "ComputeShaderFunction"
@@ -759,40 +771,42 @@
                               Name 67  "gs_ub"
                               Name 72  "out_u1"
                               Name 80  "gs_uc"
-                              Name 111  "gs_ua2"
-                              Name 112  "gs_ub2"
-                              Name 115  "out_u2"
-                              Name 123  "gs_uc2"
-                              Name 155  "gs_ua3"
-                              Name 156  "gs_ub3"
-                              Name 159  "out_u3"
-                              Name 167  "gs_uc3"
-                              Name 198  "gs_ua4"
-                              Name 199  "gs_ub4"
-                              Name 202  "out_u4"
-                              Name 210  "gs_uc4"
-                              Name 235  "inF0"
-                              Name 237  "inF0"
-                              Name 239  "inF1"
-                              Name 240  "inF1"
-                              Name 242  "inF2"
-                              Name 243  "inF2"
-                              Name 245  "inU0"
-                              Name 247  "inU0"
-                              Name 249  "inU1"
-                              Name 250  "inU1"
-                              Name 253  "@entryPointOutput"
-                              Name 254  "param"
-                              Name 256  "param"
-                              Name 258  "param"
-                              Name 260  "param"
-                              Name 262  "param"
-                              Decorate 237(inF0) Location 0
-                              Decorate 240(inF1) Location 1
-                              Decorate 243(inF2) Location 2
-                              Decorate 247(inU0) Location 3
-                              Decorate 250(inU1) Location 4
-                              Decorate 253(@entryPointOutput) Location 0
+                              Name 102  "gs_fa"
+                              Name 103  "gs_fb"
+                              Name 116  "gs_ua2"
+                              Name 117  "gs_ub2"
+                              Name 120  "out_u2"
+                              Name 128  "gs_uc2"
+                              Name 160  "gs_ua3"
+                              Name 161  "gs_ub3"
+                              Name 164  "out_u3"
+                              Name 172  "gs_uc3"
+                              Name 203  "gs_ua4"
+                              Name 204  "gs_ub4"
+                              Name 207  "out_u4"
+                              Name 215  "gs_uc4"
+                              Name 240  "inF0"
+                              Name 242  "inF0"
+                              Name 244  "inF1"
+                              Name 245  "inF1"
+                              Name 247  "inF2"
+                              Name 248  "inF2"
+                              Name 250  "inU0"
+                              Name 252  "inU0"
+                              Name 254  "inU1"
+                              Name 255  "inU1"
+                              Name 258  "@entryPointOutput"
+                              Name 259  "param"
+                              Name 261  "param"
+                              Name 263  "param"
+                              Name 265  "param"
+                              Name 267  "param"
+                              Decorate 242(inF0) Location 0
+                              Decorate 245(inF1) Location 1
+                              Decorate 248(inF2) Location 2
+                              Decorate 252(inU0) Location 3
+                              Decorate 255(inU1) Location 4
+                              Decorate 258(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -824,74 +838,77 @@
               69:      8(int) Constant 1
               70:      8(int) Constant 0
        80(gs_uc):     65(ptr) Variable Workgroup
-             106:             TypeVector 61(bool) 2
-             107:   24(fvec2) ConstantComposite 62 62
-             110:             TypePointer Workgroup 26(ivec2)
-     111(gs_ua2):    110(ptr) Variable Workgroup
-     112(gs_ub2):    110(ptr) Variable Workgroup
-     123(gs_uc2):    110(ptr) Variable Workgroup
-             144:    6(float) Constant 1065353216
-             145:    6(float) Constant 1073741824
-             146:   24(fvec2) ConstantComposite 144 145
-             150:             TypeVector 61(bool) 3
-             151:   36(fvec3) ConstantComposite 62 62 62
-             154:             TypePointer Workgroup 38(ivec3)
-     155(gs_ua3):    154(ptr) Variable Workgroup
-     156(gs_ub3):    154(ptr) Variable Workgroup
-     167(gs_uc3):    154(ptr) Variable Workgroup
-             188:    6(float) Constant 1077936128
-             189:   36(fvec3) ConstantComposite 144 145 188
-             193:             TypeVector 61(bool) 4
-             194:   48(fvec4) ConstantComposite 62 62 62 62
-             197:             TypePointer Workgroup 50(ivec4)
-     198(gs_ua4):    197(ptr) Variable Workgroup
-     199(gs_ub4):    197(ptr) Variable Workgroup
-     210(gs_uc4):    197(ptr) Variable Workgroup
-             231:    6(float) Constant 1082130432
-             232:   48(fvec4) ConstantComposite 144 145 188 231
-             236:             TypePointer Input 48(fvec4)
-       237(inF0):    236(ptr) Variable Input
-       240(inF1):    236(ptr) Variable Input
-       243(inF2):    236(ptr) Variable Input
-             246:             TypePointer Input 50(ivec4)
-       247(inU0):    246(ptr) Variable Input
-       250(inU1):    246(ptr) Variable Input
-             252:             TypePointer Output 48(fvec4)
-253(@entryPointOutput):    252(ptr) Variable Output
+             101:             TypePointer Workgroup 6(float)
+      102(gs_fa):    101(ptr) Variable Workgroup
+      103(gs_fb):    101(ptr) Variable Workgroup
+             111:             TypeVector 61(bool) 2
+             112:   24(fvec2) ConstantComposite 62 62
+             115:             TypePointer Workgroup 26(ivec2)
+     116(gs_ua2):    115(ptr) Variable Workgroup
+     117(gs_ub2):    115(ptr) Variable Workgroup
+     128(gs_uc2):    115(ptr) Variable Workgroup
+             149:    6(float) Constant 1065353216
+             150:    6(float) Constant 1073741824
+             151:   24(fvec2) ConstantComposite 149 150
+             155:             TypeVector 61(bool) 3
+             156:   36(fvec3) ConstantComposite 62 62 62
+             159:             TypePointer Workgroup 38(ivec3)
+     160(gs_ua3):    159(ptr) Variable Workgroup
+     161(gs_ub3):    159(ptr) Variable Workgroup
+     172(gs_uc3):    159(ptr) Variable Workgroup
+             193:    6(float) Constant 1077936128
+             194:   36(fvec3) ConstantComposite 149 150 193
+             198:             TypeVector 61(bool) 4
+             199:   48(fvec4) ConstantComposite 62 62 62 62
+             202:             TypePointer Workgroup 50(ivec4)
+     203(gs_ua4):    202(ptr) Variable Workgroup
+     204(gs_ub4):    202(ptr) Variable Workgroup
+     215(gs_uc4):    202(ptr) Variable Workgroup
+             236:    6(float) Constant 1082130432
+             237:   48(fvec4) ConstantComposite 149 150 193 236
+             241:             TypePointer Input 48(fvec4)
+       242(inF0):    241(ptr) Variable Input
+       245(inF1):    241(ptr) Variable Input
+       248(inF2):    241(ptr) Variable Input
+             251:             TypePointer Input 50(ivec4)
+       252(inU0):    251(ptr) Variable Input
+       255(inU1):    251(ptr) Variable Input
+             257:             TypePointer Output 48(fvec4)
+258(@entryPointOutput):    257(ptr) Variable Output
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-       235(inF0):     49(ptr) Variable Function
-       239(inF1):     49(ptr) Variable Function
-       242(inF2):     49(ptr) Variable Function
-       245(inU0):     51(ptr) Variable Function
-       249(inU1):     51(ptr) Variable Function
-      254(param):     49(ptr) Variable Function
-      256(param):     49(ptr) Variable Function
-      258(param):     49(ptr) Variable Function
-      260(param):     51(ptr) Variable Function
-      262(param):     51(ptr) Variable Function
-             238:   48(fvec4) Load 237(inF0)
-                              Store 235(inF0) 238
-             241:   48(fvec4) Load 240(inF1)
-                              Store 239(inF1) 241
-             244:   48(fvec4) Load 243(inF2)
-                              Store 242(inF2) 244
-             248:   50(ivec4) Load 247(inU0)
-                              Store 245(inU0) 248
-             251:   50(ivec4) Load 250(inU1)
-                              Store 249(inU1) 251
-             255:   48(fvec4) Load 235(inF0)
-                              Store 254(param) 255
-             257:   48(fvec4) Load 239(inF1)
-                              Store 256(param) 257
-             259:   48(fvec4) Load 242(inF2)
-                              Store 258(param) 259
-             261:   50(ivec4) Load 245(inU0)
-                              Store 260(param) 261
-             263:   50(ivec4) Load 249(inU1)
-                              Store 262(param) 263
-             264:   48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 254(param) 256(param) 258(param) 260(param) 262(param)
-                              Store 253(@entryPointOutput) 264
+       240(inF0):     49(ptr) Variable Function
+       244(inF1):     49(ptr) Variable Function
+       247(inF2):     49(ptr) Variable Function
+       250(inU0):     51(ptr) Variable Function
+       254(inU1):     51(ptr) Variable Function
+      259(param):     49(ptr) Variable Function
+      261(param):     49(ptr) Variable Function
+      263(param):     49(ptr) Variable Function
+      265(param):     51(ptr) Variable Function
+      267(param):     51(ptr) Variable Function
+             243:   48(fvec4) Load 242(inF0)
+                              Store 240(inF0) 243
+             246:   48(fvec4) Load 245(inF1)
+                              Store 244(inF1) 246
+             249:   48(fvec4) Load 248(inF2)
+                              Store 247(inF2) 249
+             253:   50(ivec4) Load 252(inU0)
+                              Store 250(inU0) 253
+             256:   50(ivec4) Load 255(inU1)
+                              Store 254(inU1) 256
+             260:   48(fvec4) Load 240(inF0)
+                              Store 259(param) 260
+             262:   48(fvec4) Load 244(inF1)
+                              Store 261(param) 262
+             264:   48(fvec4) Load 247(inF2)
+                              Store 263(param) 264
+             266:   50(ivec4) Load 250(inU0)
+                              Store 265(param) 266
+             268:   50(ivec4) Load 254(inU1)
+                              Store 267(param) 268
+             269:   48(fvec4) FunctionCall 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;) 259(param) 261(param) 263(param) 265(param) 267(param)
+                              Store 258(@entryPointOutput) 269
                               Return
                               FunctionEnd
 16(ComputeShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
@@ -942,6 +959,8 @@
               99:      8(int) Load 67(gs_ub)
              100:      8(int) AtomicXor 66(gs_ua) 69 70 99
                               Store 72(out_u1) 100
+             104:    6(float) Load 103(gs_fb)
+             105:    6(float) AtomicFAddEXT 102(gs_fa) 69 70 104
                               ReturnValue 62
                               FunctionEnd
 22(ComputeShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
@@ -958,48 +977,48 @@
         32(inU0):     27(ptr) FunctionParameter
         33(inU1):     27(ptr) FunctionParameter
               35:             Label
-     115(out_u2):     27(ptr) Variable Function
-             105:   24(fvec2) Load 29(inF0)
-             108:  106(bvec2) FUnordNotEqual 105 107
-             109:    61(bool) All 108
-             113:   26(ivec2) Load 112(gs_ub2)
-             114:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 113
-             116:   26(ivec2) Load 112(gs_ub2)
-             117:   26(ivec2) AtomicIAdd 111(gs_ua2) 69 70 116
-                              Store 115(out_u2) 117
-             118:   26(ivec2) Load 112(gs_ub2)
-             119:   26(ivec2) AtomicAnd 111(gs_ua2) 69 70 118
-             120:   26(ivec2) Load 112(gs_ub2)
-             121:   26(ivec2) AtomicAnd 111(gs_ua2) 69 70 120
-                              Store 115(out_u2) 121
-             122:   26(ivec2) Load 112(gs_ub2)
-             124:   26(ivec2) Load 123(gs_uc2)
-             125:   26(ivec2) AtomicCompareExchange 111(gs_ua2) 69 70 70 124 122
-                              Store 115(out_u2) 125
-             126:   26(ivec2) Load 112(gs_ub2)
-             127:   26(ivec2) AtomicExchange 111(gs_ua2) 69 70 126
-                              Store 115(out_u2) 127
-             128:   26(ivec2) Load 112(gs_ub2)
-             129:   26(ivec2) AtomicUMax 111(gs_ua2) 69 70 128
-             130:   26(ivec2) Load 112(gs_ub2)
-             131:   26(ivec2) AtomicUMax 111(gs_ua2) 69 70 130
-                              Store 115(out_u2) 131
-             132:   26(ivec2) Load 112(gs_ub2)
-             133:   26(ivec2) AtomicUMin 111(gs_ua2) 69 70 132
-             134:   26(ivec2) Load 112(gs_ub2)
-             135:   26(ivec2) AtomicUMin 111(gs_ua2) 69 70 134
-                              Store 115(out_u2) 135
-             136:   26(ivec2) Load 112(gs_ub2)
-             137:   26(ivec2) AtomicOr 111(gs_ua2) 69 70 136
-             138:   26(ivec2) Load 112(gs_ub2)
-             139:   26(ivec2) AtomicOr 111(gs_ua2) 69 70 138
-                              Store 115(out_u2) 139
-             140:   26(ivec2) Load 112(gs_ub2)
-             141:   26(ivec2) AtomicXor 111(gs_ua2) 69 70 140
-             142:   26(ivec2) Load 112(gs_ub2)
-             143:   26(ivec2) AtomicXor 111(gs_ua2) 69 70 142
-                              Store 115(out_u2) 143
-                              ReturnValue 146
+     120(out_u2):     27(ptr) Variable Function
+             110:   24(fvec2) Load 29(inF0)
+             113:  111(bvec2) FUnordNotEqual 110 112
+             114:    61(bool) All 113
+             118:   26(ivec2) Load 117(gs_ub2)
+             119:   26(ivec2) AtomicIAdd 116(gs_ua2) 69 70 118
+             121:   26(ivec2) Load 117(gs_ub2)
+             122:   26(ivec2) AtomicIAdd 116(gs_ua2) 69 70 121
+                              Store 120(out_u2) 122
+             123:   26(ivec2) Load 117(gs_ub2)
+             124:   26(ivec2) AtomicAnd 116(gs_ua2) 69 70 123
+             125:   26(ivec2) Load 117(gs_ub2)
+             126:   26(ivec2) AtomicAnd 116(gs_ua2) 69 70 125
+                              Store 120(out_u2) 126
+             127:   26(ivec2) Load 117(gs_ub2)
+             129:   26(ivec2) Load 128(gs_uc2)
+             130:   26(ivec2) AtomicCompareExchange 116(gs_ua2) 69 70 70 129 127
+                              Store 120(out_u2) 130
+             131:   26(ivec2) Load 117(gs_ub2)
+             132:   26(ivec2) AtomicExchange 116(gs_ua2) 69 70 131
+                              Store 120(out_u2) 132
+             133:   26(ivec2) Load 117(gs_ub2)
+             134:   26(ivec2) AtomicUMax 116(gs_ua2) 69 70 133
+             135:   26(ivec2) Load 117(gs_ub2)
+             136:   26(ivec2) AtomicUMax 116(gs_ua2) 69 70 135
+                              Store 120(out_u2) 136
+             137:   26(ivec2) Load 117(gs_ub2)
+             138:   26(ivec2) AtomicUMin 116(gs_ua2) 69 70 137
+             139:   26(ivec2) Load 117(gs_ub2)
+             140:   26(ivec2) AtomicUMin 116(gs_ua2) 69 70 139
+                              Store 120(out_u2) 140
+             141:   26(ivec2) Load 117(gs_ub2)
+             142:   26(ivec2) AtomicOr 116(gs_ua2) 69 70 141
+             143:   26(ivec2) Load 117(gs_ub2)
+             144:   26(ivec2) AtomicOr 116(gs_ua2) 69 70 143
+                              Store 120(out_u2) 144
+             145:   26(ivec2) Load 117(gs_ub2)
+             146:   26(ivec2) AtomicXor 116(gs_ua2) 69 70 145
+             147:   26(ivec2) Load 117(gs_ub2)
+             148:   26(ivec2) AtomicXor 116(gs_ua2) 69 70 147
+                              Store 120(out_u2) 148
+                              ReturnValue 151
                               FunctionEnd
 46(ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
         41(inF0):     37(ptr) FunctionParameter
@@ -1008,48 +1027,48 @@
         44(inU0):     39(ptr) FunctionParameter
         45(inU1):     39(ptr) FunctionParameter
               47:             Label
-     159(out_u3):     39(ptr) Variable Function
-             149:   36(fvec3) Load 41(inF0)
-             152:  150(bvec3) FUnordNotEqual 149 151
-             153:    61(bool) All 152
-             157:   38(ivec3) Load 156(gs_ub3)
-             158:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 157
-             160:   38(ivec3) Load 156(gs_ub3)
-             161:   38(ivec3) AtomicIAdd 155(gs_ua3) 69 70 160
-                              Store 159(out_u3) 161
-             162:   38(ivec3) Load 156(gs_ub3)
-             163:   38(ivec3) AtomicAnd 155(gs_ua3) 69 70 162
-             164:   38(ivec3) Load 156(gs_ub3)
-             165:   38(ivec3) AtomicAnd 155(gs_ua3) 69 70 164
-                              Store 159(out_u3) 165
-             166:   38(ivec3) Load 156(gs_ub3)
-             168:   38(ivec3) Load 167(gs_uc3)
-             169:   38(ivec3) AtomicCompareExchange 155(gs_ua3) 69 70 70 168 166
-                              Store 159(out_u3) 169
-             170:   38(ivec3) Load 156(gs_ub3)
-             171:   38(ivec3) AtomicExchange 155(gs_ua3) 69 70 170
-                              Store 159(out_u3) 171
-             172:   38(ivec3) Load 156(gs_ub3)
-             173:   38(ivec3) AtomicUMax 155(gs_ua3) 69 70 172
-             174:   38(ivec3) Load 156(gs_ub3)
-             175:   38(ivec3) AtomicUMax 155(gs_ua3) 69 70 174
-                              Store 159(out_u3) 175
-             176:   38(ivec3) Load 156(gs_ub3)
-             177:   38(ivec3) AtomicUMin 155(gs_ua3) 69 70 176
-             178:   38(ivec3) Load 156(gs_ub3)
-             179:   38(ivec3) AtomicUMin 155(gs_ua3) 69 70 178
-                              Store 159(out_u3) 179
-             180:   38(ivec3) Load 156(gs_ub3)
-             181:   38(ivec3) AtomicOr 155(gs_ua3) 69 70 180
-             182:   38(ivec3) Load 156(gs_ub3)
-             183:   38(ivec3) AtomicOr 155(gs_ua3) 69 70 182
-                              Store 159(out_u3) 183
-             184:   38(ivec3) Load 156(gs_ub3)
-             185:   38(ivec3) AtomicXor 155(gs_ua3) 69 70 184
-             186:   38(ivec3) Load 156(gs_ub3)
-             187:   38(ivec3) AtomicXor 155(gs_ua3) 69 70 186
-                              Store 159(out_u3) 187
-                              ReturnValue 189
+     164(out_u3):     39(ptr) Variable Function
+             154:   36(fvec3) Load 41(inF0)
+             157:  155(bvec3) FUnordNotEqual 154 156
+             158:    61(bool) All 157
+             162:   38(ivec3) Load 161(gs_ub3)
+             163:   38(ivec3) AtomicIAdd 160(gs_ua3) 69 70 162
+             165:   38(ivec3) Load 161(gs_ub3)
+             166:   38(ivec3) AtomicIAdd 160(gs_ua3) 69 70 165
+                              Store 164(out_u3) 166
+             167:   38(ivec3) Load 161(gs_ub3)
+             168:   38(ivec3) AtomicAnd 160(gs_ua3) 69 70 167
+             169:   38(ivec3) Load 161(gs_ub3)
+             170:   38(ivec3) AtomicAnd 160(gs_ua3) 69 70 169
+                              Store 164(out_u3) 170
+             171:   38(ivec3) Load 161(gs_ub3)
+             173:   38(ivec3) Load 172(gs_uc3)
+             174:   38(ivec3) AtomicCompareExchange 160(gs_ua3) 69 70 70 173 171
+                              Store 164(out_u3) 174
+             175:   38(ivec3) Load 161(gs_ub3)
+             176:   38(ivec3) AtomicExchange 160(gs_ua3) 69 70 175
+                              Store 164(out_u3) 176
+             177:   38(ivec3) Load 161(gs_ub3)
+             178:   38(ivec3) AtomicUMax 160(gs_ua3) 69 70 177
+             179:   38(ivec3) Load 161(gs_ub3)
+             180:   38(ivec3) AtomicUMax 160(gs_ua3) 69 70 179
+                              Store 164(out_u3) 180
+             181:   38(ivec3) Load 161(gs_ub3)
+             182:   38(ivec3) AtomicUMin 160(gs_ua3) 69 70 181
+             183:   38(ivec3) Load 161(gs_ub3)
+             184:   38(ivec3) AtomicUMin 160(gs_ua3) 69 70 183
+                              Store 164(out_u3) 184
+             185:   38(ivec3) Load 161(gs_ub3)
+             186:   38(ivec3) AtomicOr 160(gs_ua3) 69 70 185
+             187:   38(ivec3) Load 161(gs_ub3)
+             188:   38(ivec3) AtomicOr 160(gs_ua3) 69 70 187
+                              Store 164(out_u3) 188
+             189:   38(ivec3) Load 161(gs_ub3)
+             190:   38(ivec3) AtomicXor 160(gs_ua3) 69 70 189
+             191:   38(ivec3) Load 161(gs_ub3)
+             192:   38(ivec3) AtomicXor 160(gs_ua3) 69 70 191
+                              Store 164(out_u3) 192
+                              ReturnValue 194
                               FunctionEnd
 58(@ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
         53(inF0):     49(ptr) FunctionParameter
@@ -1058,46 +1077,46 @@
         56(inU0):     51(ptr) FunctionParameter
         57(inU1):     51(ptr) FunctionParameter
               59:             Label
-     202(out_u4):     51(ptr) Variable Function
-             192:   48(fvec4) Load 53(inF0)
-             195:  193(bvec4) FUnordNotEqual 192 194
-             196:    61(bool) All 195
-             200:   50(ivec4) Load 199(gs_ub4)
-             201:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 200
-             203:   50(ivec4) Load 199(gs_ub4)
-             204:   50(ivec4) AtomicIAdd 198(gs_ua4) 69 70 203
-                              Store 202(out_u4) 204
-             205:   50(ivec4) Load 199(gs_ub4)
-             206:   50(ivec4) AtomicAnd 198(gs_ua4) 69 70 205
-             207:   50(ivec4) Load 199(gs_ub4)
-             208:   50(ivec4) AtomicAnd 198(gs_ua4) 69 70 207
-                              Store 202(out_u4) 208
-             209:   50(ivec4) Load 199(gs_ub4)
-             211:   50(ivec4) Load 210(gs_uc4)
-             212:   50(ivec4) AtomicCompareExchange 198(gs_ua4) 69 70 70 211 209
-                              Store 202(out_u4) 212
-             213:   50(ivec4) Load 199(gs_ub4)
-             214:   50(ivec4) AtomicExchange 198(gs_ua4) 69 70 213
-                              Store 202(out_u4) 214
-             215:   50(ivec4) Load 199(gs_ub4)
-             216:   50(ivec4) AtomicUMax 198(gs_ua4) 69 70 215
-             217:   50(ivec4) Load 199(gs_ub4)
-             218:   50(ivec4) AtomicUMax 198(gs_ua4) 69 70 217
-                              Store 202(out_u4) 218
-             219:   50(ivec4) Load 199(gs_ub4)
-             220:   50(ivec4) AtomicUMin 198(gs_ua4) 69 70 219
-             221:   50(ivec4) Load 199(gs_ub4)
-             222:   50(ivec4) AtomicUMin 198(gs_ua4) 69 70 221
-                              Store 202(out_u4) 222
-             223:   50(ivec4) Load 199(gs_ub4)
-             224:   50(ivec4) AtomicOr 198(gs_ua4) 69 70 223
-             225:   50(ivec4) Load 199(gs_ub4)
-             226:   50(ivec4) AtomicOr 198(gs_ua4) 69 70 225
-                              Store 202(out_u4) 226
-             227:   50(ivec4) Load 199(gs_ub4)
-             228:   50(ivec4) AtomicXor 198(gs_ua4) 69 70 227
-             229:   50(ivec4) Load 199(gs_ub4)
-             230:   50(ivec4) AtomicXor 198(gs_ua4) 69 70 229
-                              Store 202(out_u4) 230
-                              ReturnValue 232
+     207(out_u4):     51(ptr) Variable Function
+             197:   48(fvec4) Load 53(inF0)
+             200:  198(bvec4) FUnordNotEqual 197 199
+             201:    61(bool) All 200
+             205:   50(ivec4) Load 204(gs_ub4)
+             206:   50(ivec4) AtomicIAdd 203(gs_ua4) 69 70 205
+             208:   50(ivec4) Load 204(gs_ub4)
+             209:   50(ivec4) AtomicIAdd 203(gs_ua4) 69 70 208
+                              Store 207(out_u4) 209
+             210:   50(ivec4) Load 204(gs_ub4)
+             211:   50(ivec4) AtomicAnd 203(gs_ua4) 69 70 210
+             212:   50(ivec4) Load 204(gs_ub4)
+             213:   50(ivec4) AtomicAnd 203(gs_ua4) 69 70 212
+                              Store 207(out_u4) 213
+             214:   50(ivec4) Load 204(gs_ub4)
+             216:   50(ivec4) Load 215(gs_uc4)
+             217:   50(ivec4) AtomicCompareExchange 203(gs_ua4) 69 70 70 216 214
+                              Store 207(out_u4) 217
+             218:   50(ivec4) Load 204(gs_ub4)
+             219:   50(ivec4) AtomicExchange 203(gs_ua4) 69 70 218
+                              Store 207(out_u4) 219
+             220:   50(ivec4) Load 204(gs_ub4)
+             221:   50(ivec4) AtomicUMax 203(gs_ua4) 69 70 220
+             222:   50(ivec4) Load 204(gs_ub4)
+             223:   50(ivec4) AtomicUMax 203(gs_ua4) 69 70 222
+                              Store 207(out_u4) 223
+             224:   50(ivec4) Load 204(gs_ub4)
+             225:   50(ivec4) AtomicUMin 203(gs_ua4) 69 70 224
+             226:   50(ivec4) Load 204(gs_ub4)
+             227:   50(ivec4) AtomicUMin 203(gs_ua4) 69 70 226
+                              Store 207(out_u4) 227
+             228:   50(ivec4) Load 204(gs_ub4)
+             229:   50(ivec4) AtomicOr 203(gs_ua4) 69 70 228
+             230:   50(ivec4) Load 204(gs_ub4)
+             231:   50(ivec4) AtomicOr 203(gs_ua4) 69 70 230
+                              Store 207(out_u4) 231
+             232:   50(ivec4) Load 204(gs_ub4)
+             233:   50(ivec4) AtomicXor 203(gs_ua4) 69 70 232
+             234:   50(ivec4) Load 204(gs_ub4)
+             235:   50(ivec4) AtomicXor 203(gs_ua4) 69 70 234
+                              Store 207(out_u4) 235
+                              ReturnValue 237
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
index 07f28c3..2b51d12 100644
--- a/Test/baseResults/hlsl.mintypes.frag.out
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -5,33 +5,69 @@
 0:9  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
 0:9    Function Parameters: 
 0:?     Sequence
-0:40      add ( temp mediump 2-component vector of float)
-0:40        'mf16_2' ( temp mediump 2-component vector of float)
-0:40        'mf16' ( temp mediump float)
-0:41      add ( temp mediump 2-component vector of float)
-0:41        'mf10_2' ( temp mediump 2-component vector of float)
-0:41        'mf10' ( temp mediump float)
-0:42      add ( temp mediump 2-component vector of int)
-0:42        'mi16_2' ( temp mediump 2-component vector of int)
-0:42        'mi16' ( temp mediump int)
-0:43      add ( temp mediump 2-component vector of int)
-0:43        'mi12_2' ( temp mediump 2-component vector of int)
-0:43        'mi12' ( temp mediump int)
-0:44      add ( temp mediump 2-component vector of uint)
-0:44        'mu16_2' ( temp mediump 2-component vector of uint)
-0:44        'mu16' ( temp mediump uint)
-0:47      move second child to first child ( temp 4-component vector of float)
-0:47        Color: direct index for structure ( temp 4-component vector of float)
-0:47          'psout' ( temp structure{ temp 4-component vector of float Color})
-0:47          Constant:
-0:47            0 (const int)
-0:47        Constant:
-0:47          0.000000
-0:47          0.000000
-0:47          0.000000
-0:47          0.000000
-0:48      Branch: Return with expression
-0:48        'psout' ( temp structure{ temp 4-component vector of float Color})
+0:85      add ( temp mediump 2-component vector of float)
+0:85        'mf16_2' ( temp mediump 2-component vector of float)
+0:85        'mf16' ( temp mediump float)
+0:86      add ( temp mediump 2-component vector of float)
+0:86        'mf10_2' ( temp mediump 2-component vector of float)
+0:86        'mf10' ( temp mediump float)
+0:87      add ( temp mediump 2-component vector of int)
+0:87        'mi16_2' ( temp mediump 2-component vector of int)
+0:87        'mi16' ( temp mediump int)
+0:88      add ( temp mediump 2-component vector of int)
+0:88        'mi12_2' ( temp mediump 2-component vector of int)
+0:88        'mi12' ( temp mediump int)
+0:89      add ( temp mediump 2-component vector of uint)
+0:89        'mu16_2' ( temp mediump 2-component vector of uint)
+0:89        'mu16' ( temp mediump uint)
+0:91      matrix-times-vector ( temp mediump 4-component vector of float)
+0:91        'mf16_2x4' ( temp mediump 2X4 matrix of float)
+0:91        'mf16_2' ( temp mediump 2-component vector of float)
+0:92      matrix-times-vector ( temp mediump 4-component vector of float)
+0:92        'mf16_3x4' ( temp mediump 3X4 matrix of float)
+0:92        'mf16_3' ( temp mediump 3-component vector of float)
+0:93      matrix-times-vector ( temp mediump 4-component vector of float)
+0:93        'mf16_4x4' ( temp mediump 4X4 matrix of float)
+0:93        'mf16_4' ( temp mediump 4-component vector of float)
+0:94      vector-times-matrix ( temp mediump 4-component vector of float)
+0:94        'mf16_2' ( temp mediump 2-component vector of float)
+0:94        'mf16_4x2' ( temp mediump 4X2 matrix of float)
+0:95      vector-times-matrix ( temp mediump 4-component vector of float)
+0:95        'mf16_3' ( temp mediump 3-component vector of float)
+0:95        'mf16_4x3' ( temp mediump 4X3 matrix of float)
+0:96      vector-times-matrix ( temp mediump 4-component vector of float)
+0:96        'mf16_4' ( temp mediump 4-component vector of float)
+0:96        'mf16_4x4' ( temp mediump 4X4 matrix of float)
+0:98      matrix-times-vector ( temp mediump 4-component vector of float)
+0:98        'mf10_2x4' ( temp mediump 2X4 matrix of float)
+0:98        'mf10_2' ( temp mediump 2-component vector of float)
+0:99      matrix-times-vector ( temp mediump 4-component vector of float)
+0:99        'mf10_3x4' ( temp mediump 3X4 matrix of float)
+0:99        'mf10_3' ( temp mediump 3-component vector of float)
+0:100      matrix-times-vector ( temp mediump 4-component vector of float)
+0:100        'mf10_4x4' ( temp mediump 4X4 matrix of float)
+0:100        'mf10_4' ( temp mediump 4-component vector of float)
+0:101      vector-times-matrix ( temp mediump 4-component vector of float)
+0:101        'mf10_2' ( temp mediump 2-component vector of float)
+0:101        'mf10_4x2' ( temp mediump 4X2 matrix of float)
+0:102      vector-times-matrix ( temp mediump 4-component vector of float)
+0:102        'mf10_3' ( temp mediump 3-component vector of float)
+0:102        'mf10_4x3' ( temp mediump 4X3 matrix of float)
+0:103      vector-times-matrix ( temp mediump 4-component vector of float)
+0:103        'mf10_4' ( temp mediump 4-component vector of float)
+0:103        'mf10_4x4' ( temp mediump 4X4 matrix of float)
+0:106      move second child to first child ( temp 4-component vector of float)
+0:106        Color: direct index for structure ( temp 4-component vector of float)
+0:106          'psout' ( temp structure{ temp 4-component vector of float Color})
+0:106          Constant:
+0:106            0 (const int)
+0:106        Constant:
+0:106          0.000000
+0:106          0.000000
+0:106          0.000000
+0:106          0.000000
+0:107      Branch: Return with expression
+0:107        'psout' ( temp structure{ temp 4-component vector of float Color})
 0:9  Function Definition: main( ( temp void)
 0:9    Function Parameters: 
 0:?     Sequence
@@ -56,33 +92,69 @@
 0:9  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color})
 0:9    Function Parameters: 
 0:?     Sequence
-0:40      add ( temp mediump 2-component vector of float)
-0:40        'mf16_2' ( temp mediump 2-component vector of float)
-0:40        'mf16' ( temp mediump float)
-0:41      add ( temp mediump 2-component vector of float)
-0:41        'mf10_2' ( temp mediump 2-component vector of float)
-0:41        'mf10' ( temp mediump float)
-0:42      add ( temp mediump 2-component vector of int)
-0:42        'mi16_2' ( temp mediump 2-component vector of int)
-0:42        'mi16' ( temp mediump int)
-0:43      add ( temp mediump 2-component vector of int)
-0:43        'mi12_2' ( temp mediump 2-component vector of int)
-0:43        'mi12' ( temp mediump int)
-0:44      add ( temp mediump 2-component vector of uint)
-0:44        'mu16_2' ( temp mediump 2-component vector of uint)
-0:44        'mu16' ( temp mediump uint)
-0:47      move second child to first child ( temp 4-component vector of float)
-0:47        Color: direct index for structure ( temp 4-component vector of float)
-0:47          'psout' ( temp structure{ temp 4-component vector of float Color})
-0:47          Constant:
-0:47            0 (const int)
-0:47        Constant:
-0:47          0.000000
-0:47          0.000000
-0:47          0.000000
-0:47          0.000000
-0:48      Branch: Return with expression
-0:48        'psout' ( temp structure{ temp 4-component vector of float Color})
+0:85      add ( temp mediump 2-component vector of float)
+0:85        'mf16_2' ( temp mediump 2-component vector of float)
+0:85        'mf16' ( temp mediump float)
+0:86      add ( temp mediump 2-component vector of float)
+0:86        'mf10_2' ( temp mediump 2-component vector of float)
+0:86        'mf10' ( temp mediump float)
+0:87      add ( temp mediump 2-component vector of int)
+0:87        'mi16_2' ( temp mediump 2-component vector of int)
+0:87        'mi16' ( temp mediump int)
+0:88      add ( temp mediump 2-component vector of int)
+0:88        'mi12_2' ( temp mediump 2-component vector of int)
+0:88        'mi12' ( temp mediump int)
+0:89      add ( temp mediump 2-component vector of uint)
+0:89        'mu16_2' ( temp mediump 2-component vector of uint)
+0:89        'mu16' ( temp mediump uint)
+0:91      matrix-times-vector ( temp mediump 4-component vector of float)
+0:91        'mf16_2x4' ( temp mediump 2X4 matrix of float)
+0:91        'mf16_2' ( temp mediump 2-component vector of float)
+0:92      matrix-times-vector ( temp mediump 4-component vector of float)
+0:92        'mf16_3x4' ( temp mediump 3X4 matrix of float)
+0:92        'mf16_3' ( temp mediump 3-component vector of float)
+0:93      matrix-times-vector ( temp mediump 4-component vector of float)
+0:93        'mf16_4x4' ( temp mediump 4X4 matrix of float)
+0:93        'mf16_4' ( temp mediump 4-component vector of float)
+0:94      vector-times-matrix ( temp mediump 4-component vector of float)
+0:94        'mf16_2' ( temp mediump 2-component vector of float)
+0:94        'mf16_4x2' ( temp mediump 4X2 matrix of float)
+0:95      vector-times-matrix ( temp mediump 4-component vector of float)
+0:95        'mf16_3' ( temp mediump 3-component vector of float)
+0:95        'mf16_4x3' ( temp mediump 4X3 matrix of float)
+0:96      vector-times-matrix ( temp mediump 4-component vector of float)
+0:96        'mf16_4' ( temp mediump 4-component vector of float)
+0:96        'mf16_4x4' ( temp mediump 4X4 matrix of float)
+0:98      matrix-times-vector ( temp mediump 4-component vector of float)
+0:98        'mf10_2x4' ( temp mediump 2X4 matrix of float)
+0:98        'mf10_2' ( temp mediump 2-component vector of float)
+0:99      matrix-times-vector ( temp mediump 4-component vector of float)
+0:99        'mf10_3x4' ( temp mediump 3X4 matrix of float)
+0:99        'mf10_3' ( temp mediump 3-component vector of float)
+0:100      matrix-times-vector ( temp mediump 4-component vector of float)
+0:100        'mf10_4x4' ( temp mediump 4X4 matrix of float)
+0:100        'mf10_4' ( temp mediump 4-component vector of float)
+0:101      vector-times-matrix ( temp mediump 4-component vector of float)
+0:101        'mf10_2' ( temp mediump 2-component vector of float)
+0:101        'mf10_4x2' ( temp mediump 4X2 matrix of float)
+0:102      vector-times-matrix ( temp mediump 4-component vector of float)
+0:102        'mf10_3' ( temp mediump 3-component vector of float)
+0:102        'mf10_4x3' ( temp mediump 4X3 matrix of float)
+0:103      vector-times-matrix ( temp mediump 4-component vector of float)
+0:103        'mf10_4' ( temp mediump 4-component vector of float)
+0:103        'mf10_4x4' ( temp mediump 4X4 matrix of float)
+0:106      move second child to first child ( temp 4-component vector of float)
+0:106        Color: direct index for structure ( temp 4-component vector of float)
+0:106          'psout' ( temp structure{ temp 4-component vector of float Color})
+0:106          Constant:
+0:106            0 (const int)
+0:106        Constant:
+0:106          0.000000
+0:106          0.000000
+0:106          0.000000
+0:106          0.000000
+0:107      Branch: Return with expression
+0:107        'psout' ( temp structure{ temp 4-component vector of float Color})
 0:9  Function Definition: main( ( temp void)
 0:9    Function Parameters: 
 0:?     Sequence
@@ -99,12 +171,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 70
+// Id's are bound by 132
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 64
+                              EntryPoint Fragment 4  "main" 126
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -121,12 +193,26 @@
                               Name 39  "mi12"
                               Name 46  "mu16_2"
                               Name 49  "mu16"
-                              Name 54  "psout"
-                              Name 64  "@entryPointOutput.Color"
-                              Name 67  "$Global"
-                              MemberName 67($Global) 0  "b1a"
-                              MemberName 67($Global) 1  "b1b"
-                              Name 69  ""
+                              Name 55  "mf16_2x4"
+                              Name 61  "mf16_3x4"
+                              Name 65  "mf16_3"
+                              Name 70  "mf16_4x4"
+                              Name 73  "mf16_4"
+                              Name 79  "mf16_4x2"
+                              Name 85  "mf16_4x3"
+                              Name 91  "mf10_2x4"
+                              Name 95  "mf10_3x4"
+                              Name 97  "mf10_3"
+                              Name 100  "mf10_4x4"
+                              Name 102  "mf10_4"
+                              Name 106  "mf10_4x2"
+                              Name 110  "mf10_4x3"
+                              Name 117  "psout"
+                              Name 126  "@entryPointOutput.Color"
+                              Name 129  "$Global"
+                              MemberName 129($Global) 0  "b1a"
+                              MemberName 129($Global) 1  "b1b"
+                              Name 131  ""
                               Decorate 14(mf16_2) RelaxedPrecision
                               Decorate 15 RelaxedPrecision
                               Decorate 17(mf16) RelaxedPrecision
@@ -157,14 +243,64 @@
                               Decorate 50 RelaxedPrecision
                               Decorate 51 RelaxedPrecision
                               Decorate 52 RelaxedPrecision
-                              Decorate 64(@entryPointOutput.Color) Location 0
-                              MemberDecorate 67($Global) 0 RelaxedPrecision
-                              MemberDecorate 67($Global) 0 Offset 0
-                              MemberDecorate 67($Global) 1 RelaxedPrecision
-                              MemberDecorate 67($Global) 1 Offset 4
-                              Decorate 67($Global) Block
-                              Decorate 69 DescriptorSet 0
-                              Decorate 69 Binding 0
+                              Decorate 55(mf16_2x4) RelaxedPrecision
+                              Decorate 56 RelaxedPrecision
+                              Decorate 57 RelaxedPrecision
+                              Decorate 58 RelaxedPrecision
+                              Decorate 61(mf16_3x4) RelaxedPrecision
+                              Decorate 62 RelaxedPrecision
+                              Decorate 65(mf16_3) RelaxedPrecision
+                              Decorate 66 RelaxedPrecision
+                              Decorate 67 RelaxedPrecision
+                              Decorate 70(mf16_4x4) RelaxedPrecision
+                              Decorate 71 RelaxedPrecision
+                              Decorate 73(mf16_4) RelaxedPrecision
+                              Decorate 74 RelaxedPrecision
+                              Decorate 75 RelaxedPrecision
+                              Decorate 76 RelaxedPrecision
+                              Decorate 79(mf16_4x2) RelaxedPrecision
+                              Decorate 80 RelaxedPrecision
+                              Decorate 81 RelaxedPrecision
+                              Decorate 82 RelaxedPrecision
+                              Decorate 85(mf16_4x3) RelaxedPrecision
+                              Decorate 86 RelaxedPrecision
+                              Decorate 87 RelaxedPrecision
+                              Decorate 88 RelaxedPrecision
+                              Decorate 89 RelaxedPrecision
+                              Decorate 90 RelaxedPrecision
+                              Decorate 91(mf10_2x4) RelaxedPrecision
+                              Decorate 92 RelaxedPrecision
+                              Decorate 93 RelaxedPrecision
+                              Decorate 94 RelaxedPrecision
+                              Decorate 95(mf10_3x4) RelaxedPrecision
+                              Decorate 96 RelaxedPrecision
+                              Decorate 97(mf10_3) RelaxedPrecision
+                              Decorate 98 RelaxedPrecision
+                              Decorate 99 RelaxedPrecision
+                              Decorate 100(mf10_4x4) RelaxedPrecision
+                              Decorate 101 RelaxedPrecision
+                              Decorate 102(mf10_4) RelaxedPrecision
+                              Decorate 103 RelaxedPrecision
+                              Decorate 104 RelaxedPrecision
+                              Decorate 105 RelaxedPrecision
+                              Decorate 106(mf10_4x2) RelaxedPrecision
+                              Decorate 107 RelaxedPrecision
+                              Decorate 108 RelaxedPrecision
+                              Decorate 109 RelaxedPrecision
+                              Decorate 110(mf10_4x3) RelaxedPrecision
+                              Decorate 111 RelaxedPrecision
+                              Decorate 112 RelaxedPrecision
+                              Decorate 113 RelaxedPrecision
+                              Decorate 114 RelaxedPrecision
+                              Decorate 115 RelaxedPrecision
+                              Decorate 126(@entryPointOutput.Color) Location 0
+                              MemberDecorate 129($Global) 0 RelaxedPrecision
+                              MemberDecorate 129($Global) 0 Offset 0
+                              MemberDecorate 129($Global) 1 RelaxedPrecision
+                              MemberDecorate 129($Global) 1 Offset 4
+                              Decorate 129($Global) Block
+                              Decorate 131 DescriptorSet 0
+                              Decorate 131 Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -182,21 +318,33 @@
               44:             TypeVector 43(int) 2
               45:             TypePointer Function 44(ivec2)
               48:             TypePointer Function 43(int)
-              53:             TypePointer Function 8(PS_OUTPUT)
-              55:     27(int) Constant 0
-              56:    6(float) Constant 0
-              57:    7(fvec4) ConstantComposite 56 56 56 56
-              58:             TypePointer Function 7(fvec4)
-              63:             TypePointer Output 7(fvec4)
-64(@entryPointOutput.Color):     63(ptr) Variable Output
-     67($Global):             TypeStruct 6(float) 6(float)
-              68:             TypePointer Uniform 67($Global)
-              69:     68(ptr) Variable Uniform
+              53:             TypeMatrix 7(fvec4) 2
+              54:             TypePointer Function 53
+              59:             TypeMatrix 7(fvec4) 3
+              60:             TypePointer Function 59
+              63:             TypeVector 6(float) 3
+              64:             TypePointer Function 63(fvec3)
+              68:             TypeMatrix 7(fvec4) 4
+              69:             TypePointer Function 68
+              72:             TypePointer Function 7(fvec4)
+              77:             TypeMatrix 12(fvec2) 4
+              78:             TypePointer Function 77
+              83:             TypeMatrix 63(fvec3) 4
+              84:             TypePointer Function 83
+             116:             TypePointer Function 8(PS_OUTPUT)
+             118:     27(int) Constant 0
+             119:    6(float) Constant 0
+             120:    7(fvec4) ConstantComposite 119 119 119 119
+             125:             TypePointer Output 7(fvec4)
+126(@entryPointOutput.Color):    125(ptr) Variable Output
+    129($Global):             TypeStruct 6(float) 6(float)
+             130:             TypePointer Uniform 129($Global)
+             131:    130(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
-              65:8(PS_OUTPUT) FunctionCall 10(@main()
-              66:    7(fvec4) CompositeExtract 65 0
-                              Store 64(@entryPointOutput.Color) 66
+             127:8(PS_OUTPUT) FunctionCall 10(@main()
+             128:    7(fvec4) CompositeExtract 127 0
+                              Store 126(@entryPointOutput.Color) 128
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
@@ -211,7 +359,21 @@
         39(mi12):     32(ptr) Variable Function
       46(mu16_2):     45(ptr) Variable Function
         49(mu16):     48(ptr) Variable Function
-       54(psout):     53(ptr) Variable Function
+    55(mf16_2x4):     54(ptr) Variable Function
+    61(mf16_3x4):     60(ptr) Variable Function
+      65(mf16_3):     64(ptr) Variable Function
+    70(mf16_4x4):     69(ptr) Variable Function
+      73(mf16_4):     72(ptr) Variable Function
+    79(mf16_4x2):     78(ptr) Variable Function
+    85(mf16_4x3):     84(ptr) Variable Function
+    91(mf10_2x4):     54(ptr) Variable Function
+    95(mf10_3x4):     60(ptr) Variable Function
+      97(mf10_3):     64(ptr) Variable Function
+   100(mf10_4x4):     69(ptr) Variable Function
+     102(mf10_4):     72(ptr) Variable Function
+   106(mf10_4x2):     78(ptr) Variable Function
+   110(mf10_4x3):     84(ptr) Variable Function
+      117(psout):    116(ptr) Variable Function
               15:   12(fvec2) Load 14(mf16_2)
               18:    6(float) Load 17(mf16)
               19:   12(fvec2) CompositeConstruct 18 18
@@ -232,8 +394,44 @@
               50:     43(int) Load 49(mu16)
               51:   44(ivec2) CompositeConstruct 50 50
               52:   44(ivec2) IAdd 47 51
-              59:     58(ptr) AccessChain 54(psout) 55
-                              Store 59 57
-              60:8(PS_OUTPUT) Load 54(psout)
-                              ReturnValue 60
+              56:          53 Load 55(mf16_2x4)
+              57:   12(fvec2) Load 14(mf16_2)
+              58:    7(fvec4) MatrixTimesVector 56 57
+              62:          59 Load 61(mf16_3x4)
+              66:   63(fvec3) Load 65(mf16_3)
+              67:    7(fvec4) MatrixTimesVector 62 66
+              71:          68 Load 70(mf16_4x4)
+              74:    7(fvec4) Load 73(mf16_4)
+              75:    7(fvec4) MatrixTimesVector 71 74
+              76:   12(fvec2) Load 14(mf16_2)
+              80:          77 Load 79(mf16_4x2)
+              81:    7(fvec4) VectorTimesMatrix 76 80
+              82:   63(fvec3) Load 65(mf16_3)
+              86:          83 Load 85(mf16_4x3)
+              87:    7(fvec4) VectorTimesMatrix 82 86
+              88:    7(fvec4) Load 73(mf16_4)
+              89:          68 Load 70(mf16_4x4)
+              90:    7(fvec4) VectorTimesMatrix 88 89
+              92:          53 Load 91(mf10_2x4)
+              93:   12(fvec2) Load 21(mf10_2)
+              94:    7(fvec4) MatrixTimesVector 92 93
+              96:          59 Load 95(mf10_3x4)
+              98:   63(fvec3) Load 97(mf10_3)
+              99:    7(fvec4) MatrixTimesVector 96 98
+             101:          68 Load 100(mf10_4x4)
+             103:    7(fvec4) Load 102(mf10_4)
+             104:    7(fvec4) MatrixTimesVector 101 103
+             105:   12(fvec2) Load 21(mf10_2)
+             107:          77 Load 106(mf10_4x2)
+             108:    7(fvec4) VectorTimesMatrix 105 107
+             109:   63(fvec3) Load 97(mf10_3)
+             111:          83 Load 110(mf10_4x3)
+             112:    7(fvec4) VectorTimesMatrix 109 111
+             113:    7(fvec4) Load 102(mf10_4)
+             114:          68 Load 100(mf10_4x4)
+             115:    7(fvec4) VectorTimesMatrix 113 114
+             121:     72(ptr) AccessChain 117(psout) 118
+                              Store 121 120
+             122:8(PS_OUTPUT) Load 117(psout)
+                              ReturnValue 122
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.nested-runtimeArray.frag.out b/Test/baseResults/hlsl.nested-runtimeArray.frag.out
new file mode 100644
index 0000000..f019290
--- /dev/null
+++ b/Test/baseResults/hlsl.nested-runtimeArray.frag.out
@@ -0,0 +1,119 @@
+hlsl.nested-runtimeArray.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: @main( ( temp float)
+0:7    Function Parameters: 
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        direct index ( temp float)
+0:8          a: direct index for structure ( temp unsized 1-element array of float)
+0:8            direct index (layout( row_major std430) buffer structure{ temp unsized 1-element array of float a})
+0:8              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a})
+0:8                'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data})
+0:8                Constant:
+0:8                  0 (const uint)
+0:8              Constant:
+0:8                0 (const int)
+0:8            Constant:
+0:8              0 (const int)
+0:8          Constant:
+0:8            0 (const int)
+0:7  Function Definition: main( ( temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child ( temp float)
+0:?         '@entryPointOutput' (layout( location=0) out float)
+0:7        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data})
+0:?     '@entryPointOutput' (layout( location=0) out float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: @main( ( temp float)
+0:7    Function Parameters: 
+0:?     Sequence
+0:8      Branch: Return with expression
+0:8        direct index ( temp float)
+0:8          a: direct index for structure ( temp unsized 1-element array of float)
+0:8            direct index (layout( row_major std430) buffer structure{ temp unsized 1-element array of float a})
+0:8              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a})
+0:8                'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data})
+0:8                Constant:
+0:8                  0 (const uint)
+0:8              Constant:
+0:8                0 (const int)
+0:8            Constant:
+0:8              0 (const int)
+0:8          Constant:
+0:8            0 (const int)
+0:7  Function Definition: main( ( temp void)
+0:7    Function Parameters: 
+0:?     Sequence
+0:7      move second child to first child ( temp float)
+0:?         '@entryPointOutput' (layout( location=0) out float)
+0:7        Function Call: @main( ( temp float)
+0:?   Linker Objects
+0:?     'B' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp unsized 1-element array of float a} @data})
+0:?     '@entryPointOutput' (layout( location=0) out float)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 26
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 24
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 8  "@main("
+                              Name 11  "A"
+                              MemberName 11(A) 0  "a"
+                              Name 13  "B"
+                              MemberName 13(B) 0  "@data"
+                              Name 15  "B"
+                              Name 24  "@entryPointOutput"
+                              Decorate 10 ArrayStride 4
+                              MemberDecorate 11(A) 0 Offset 0
+                              Decorate 11(A) BufferBlock
+                              Decorate 12 ArrayStride 4
+                              MemberDecorate 13(B) 0 Offset 0
+                              Decorate 13(B) BufferBlock
+                              Decorate 15(B) DescriptorSet 0
+                              Decorate 15(B) Binding 0
+                              Decorate 24(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeFunction 6(float)
+              10:             TypeRuntimeArray 6(float)
+           11(A):             TypeStruct 10
+              12:             TypeRuntimeArray 11(A)
+           13(B):             TypeStruct 12
+              14:             TypePointer Uniform 13(B)
+           15(B):     14(ptr) Variable Uniform
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypePointer Uniform 6(float)
+              23:             TypePointer Output 6(float)
+24(@entryPointOutput):     23(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              25:    6(float) FunctionCall 8(@main()
+                              Store 24(@entryPointOutput) 25
+                              Return
+                              FunctionEnd
+       8(@main():    6(float) Function None 7
+               9:             Label
+              19:     18(ptr) AccessChain 15(B) 17 17 17 17
+              20:    6(float) Load 19
+                              ReturnValue 20
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index 02f7d2a..05be423 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -2,94 +2,124 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:5    Function Parameters: 
+0:8  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:8    Function Parameters: 
 0:?     Sequence
-0:7      Sequence
-0:7        move second child to first child ( temp float)
-0:7          'r00' ( temp float)
-0:7          Constant:
-0:7            1.000000
-0:8      Sequence
-0:8        move second child to first child ( temp uint)
-0:8          'r01' ( temp uint)
-0:8          Constant:
-0:8            1 (const uint)
-0:9      Sequence
-0:9        move second child to first child ( temp uint)
-0:9          'r02' ( temp uint)
-0:9          Constant:
-0:9            2 (const uint)
 0:10      Sequence
-0:10        move second child to first child ( temp uint)
-0:10          'r03' ( temp uint)
+0:10        move second child to first child ( temp float)
+0:10          'r00' ( temp float)
 0:10          Constant:
-0:10            2748 (const uint)
+0:10            1.000000
 0:11      Sequence
 0:11        move second child to first child ( temp uint)
-0:11          'r04' ( temp uint)
+0:11          'r01' ( temp uint)
 0:11          Constant:
-0:11            2748 (const uint)
+0:11            1 (const uint)
 0:12      Sequence
-0:12        move second child to first child ( temp int)
-0:12          'r05' ( temp int)
+0:12        move second child to first child ( temp uint)
+0:12          'r02' ( temp uint)
 0:12          Constant:
-0:12            5 (const int)
+0:12            2 (const uint)
 0:13      Sequence
-0:13        move second child to first child ( temp int)
-0:13          'r06' ( temp int)
+0:13        move second child to first child ( temp uint)
+0:13          'r03' ( temp uint)
 0:13          Constant:
-0:13            6 (const int)
+0:13            2748 (const uint)
 0:14      Sequence
-0:14        move second child to first child ( temp int)
-0:14          'r07' ( temp int)
+0:14        move second child to first child ( temp uint)
+0:14          'r04' ( temp uint)
 0:14          Constant:
-0:14            57 (const int)
+0:14            2748 (const uint)
 0:15      Sequence
-0:15        move second child to first child ( temp uint)
-0:15          'r08' ( temp uint)
+0:15        move second child to first child ( temp int)
+0:15          'r05' ( temp int)
 0:15          Constant:
-0:15            58 (const uint)
+0:15            5 (const int)
 0:16      Sequence
-0:16        move second child to first child ( temp float)
-0:16          'r09' ( temp float)
+0:16        move second child to first child ( temp int)
+0:16          'r06' ( temp int)
 0:16          Constant:
-0:16            1.000000
+0:16            6 (const int)
 0:17      Sequence
-0:17        move second child to first child ( temp float)
-0:17          'r10' ( temp float)
+0:17        move second child to first child ( temp int)
+0:17          'r07' ( temp int)
 0:17          Constant:
-0:17            1.000000
+0:17            57 (const int)
 0:18      Sequence
-0:18        move second child to first child ( temp float)
-0:18          'r11' ( temp float)
+0:18        move second child to first child ( temp uint)
+0:18          'r08' ( temp uint)
 0:18          Constant:
-0:18            1.100000
+0:18            58 (const uint)
 0:19      Sequence
 0:19        move second child to first child ( temp float)
-0:19          'r12' ( temp float)
+0:19          'r09' ( temp float)
 0:19          Constant:
-0:19            1.100000
-0:22      move second child to first child ( temp 4-component vector of float)
-0:22        color: direct index for structure ( temp 4-component vector of float)
-0:22          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:19            1.000000
+0:20      Sequence
+0:20        move second child to first child ( temp float)
+0:20          'r10' ( temp float)
+0:20          Constant:
+0:20            1.000000
+0:21      Sequence
+0:21        move second child to first child ( temp float)
+0:21          'r11' ( temp float)
+0:21          Constant:
+0:21            1.100000
+0:22      Sequence
+0:22        move second child to first child ( temp float)
+0:22          'r12' ( temp float)
 0:22          Constant:
-0:22            0 (const int)
-0:22        Construct vec4 ( temp 4-component vector of float)
-0:22          Convert int to float ( temp float)
-0:22            'r07' ( temp int)
-0:23      Branch: Return with expression
-0:23        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:5  Function Definition: main( ( temp void)
-0:5    Function Parameters: 
+0:22            1.100000
+0:23      Sequence
+0:23        move second child to first child ( temp uint)
+0:23          'r13' ( temp uint)
+0:23          Constant:
+0:23            1 (const uint)
+0:24      Sequence
+0:24        move second child to first child ( temp uint)
+0:24          'r14' ( temp uint)
+0:24          Constant:
+0:24            2 (const uint)
+0:25      Sequence
+0:25        move second child to first child ( temp int)
+0:25          'r15' ( temp int)
+0:25          Constant:
+0:25            3 (const int)
+0:26      Sequence
+0:26        move second child to first child ( temp int)
+0:26          'r16' ( temp int)
+0:26          Constant:
+0:26            4 (const int)
+0:27      Sequence
+0:27        move second child to first child ( temp uint)
+0:27          'r17' ( temp uint)
+0:27          Constant:
+0:27            1 (const uint)
+0:28      Sequence
+0:28        move second child to first child ( temp int)
+0:28          'r18' ( temp int)
+0:28          Constant:
+0:28            3 (const int)
+0:31      move second child to first child ( temp 4-component vector of float)
+0:31        color: direct index for structure ( temp 4-component vector of float)
+0:31          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:31          Constant:
+0:31            0 (const int)
+0:31        Construct vec4 ( temp 4-component vector of float)
+0:31          Convert int to float ( temp float)
+0:31            'r07' ( temp int)
+0:32      Branch: Return with expression
+0:32        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
 0:?     Sequence
-0:5      Sequence
-0:5        move second child to first child ( temp 4-component vector of float)
+0:8      Sequence
+0:8        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:5          color: direct index for structure ( temp 4-component vector of float)
-0:5            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:5            Constant:
-0:5              0 (const int)
+0:8          color: direct index for structure ( temp 4-component vector of float)
+0:8            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:8            Constant:
+0:8              0 (const int)
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
@@ -100,105 +130,135 @@
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
-0:5    Function Parameters: 
+0:8  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:8    Function Parameters: 
 0:?     Sequence
-0:7      Sequence
-0:7        move second child to first child ( temp float)
-0:7          'r00' ( temp float)
-0:7          Constant:
-0:7            1.000000
-0:8      Sequence
-0:8        move second child to first child ( temp uint)
-0:8          'r01' ( temp uint)
-0:8          Constant:
-0:8            1 (const uint)
-0:9      Sequence
-0:9        move second child to first child ( temp uint)
-0:9          'r02' ( temp uint)
-0:9          Constant:
-0:9            2 (const uint)
 0:10      Sequence
-0:10        move second child to first child ( temp uint)
-0:10          'r03' ( temp uint)
+0:10        move second child to first child ( temp float)
+0:10          'r00' ( temp float)
 0:10          Constant:
-0:10            2748 (const uint)
+0:10            1.000000
 0:11      Sequence
 0:11        move second child to first child ( temp uint)
-0:11          'r04' ( temp uint)
+0:11          'r01' ( temp uint)
 0:11          Constant:
-0:11            2748 (const uint)
+0:11            1 (const uint)
 0:12      Sequence
-0:12        move second child to first child ( temp int)
-0:12          'r05' ( temp int)
+0:12        move second child to first child ( temp uint)
+0:12          'r02' ( temp uint)
 0:12          Constant:
-0:12            5 (const int)
+0:12            2 (const uint)
 0:13      Sequence
-0:13        move second child to first child ( temp int)
-0:13          'r06' ( temp int)
+0:13        move second child to first child ( temp uint)
+0:13          'r03' ( temp uint)
 0:13          Constant:
-0:13            6 (const int)
+0:13            2748 (const uint)
 0:14      Sequence
-0:14        move second child to first child ( temp int)
-0:14          'r07' ( temp int)
+0:14        move second child to first child ( temp uint)
+0:14          'r04' ( temp uint)
 0:14          Constant:
-0:14            57 (const int)
+0:14            2748 (const uint)
 0:15      Sequence
-0:15        move second child to first child ( temp uint)
-0:15          'r08' ( temp uint)
+0:15        move second child to first child ( temp int)
+0:15          'r05' ( temp int)
 0:15          Constant:
-0:15            58 (const uint)
+0:15            5 (const int)
 0:16      Sequence
-0:16        move second child to first child ( temp float)
-0:16          'r09' ( temp float)
+0:16        move second child to first child ( temp int)
+0:16          'r06' ( temp int)
 0:16          Constant:
-0:16            1.000000
+0:16            6 (const int)
 0:17      Sequence
-0:17        move second child to first child ( temp float)
-0:17          'r10' ( temp float)
+0:17        move second child to first child ( temp int)
+0:17          'r07' ( temp int)
 0:17          Constant:
-0:17            1.000000
+0:17            57 (const int)
 0:18      Sequence
-0:18        move second child to first child ( temp float)
-0:18          'r11' ( temp float)
+0:18        move second child to first child ( temp uint)
+0:18          'r08' ( temp uint)
 0:18          Constant:
-0:18            1.100000
+0:18            58 (const uint)
 0:19      Sequence
 0:19        move second child to first child ( temp float)
-0:19          'r12' ( temp float)
+0:19          'r09' ( temp float)
 0:19          Constant:
-0:19            1.100000
-0:22      move second child to first child ( temp 4-component vector of float)
-0:22        color: direct index for structure ( temp 4-component vector of float)
-0:22          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:19            1.000000
+0:20      Sequence
+0:20        move second child to first child ( temp float)
+0:20          'r10' ( temp float)
+0:20          Constant:
+0:20            1.000000
+0:21      Sequence
+0:21        move second child to first child ( temp float)
+0:21          'r11' ( temp float)
+0:21          Constant:
+0:21            1.100000
+0:22      Sequence
+0:22        move second child to first child ( temp float)
+0:22          'r12' ( temp float)
 0:22          Constant:
-0:22            0 (const int)
-0:22        Construct vec4 ( temp 4-component vector of float)
-0:22          Convert int to float ( temp float)
-0:22            'r07' ( temp int)
-0:23      Branch: Return with expression
-0:23        'ps_output' ( temp structure{ temp 4-component vector of float color})
-0:5  Function Definition: main( ( temp void)
-0:5    Function Parameters: 
+0:22            1.100000
+0:23      Sequence
+0:23        move second child to first child ( temp uint)
+0:23          'r13' ( temp uint)
+0:23          Constant:
+0:23            1 (const uint)
+0:24      Sequence
+0:24        move second child to first child ( temp uint)
+0:24          'r14' ( temp uint)
+0:24          Constant:
+0:24            2 (const uint)
+0:25      Sequence
+0:25        move second child to first child ( temp int)
+0:25          'r15' ( temp int)
+0:25          Constant:
+0:25            3 (const int)
+0:26      Sequence
+0:26        move second child to first child ( temp int)
+0:26          'r16' ( temp int)
+0:26          Constant:
+0:26            4 (const int)
+0:27      Sequence
+0:27        move second child to first child ( temp uint)
+0:27          'r17' ( temp uint)
+0:27          Constant:
+0:27            1 (const uint)
+0:28      Sequence
+0:28        move second child to first child ( temp int)
+0:28          'r18' ( temp int)
+0:28          Constant:
+0:28            3 (const int)
+0:31      move second child to first child ( temp 4-component vector of float)
+0:31        color: direct index for structure ( temp 4-component vector of float)
+0:31          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:31          Constant:
+0:31            0 (const int)
+0:31        Construct vec4 ( temp 4-component vector of float)
+0:31          Convert int to float ( temp float)
+0:31            'r07' ( temp int)
+0:32      Branch: Return with expression
+0:32        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:8  Function Definition: main( ( temp void)
+0:8    Function Parameters: 
 0:?     Sequence
-0:5      Sequence
-0:5        move second child to first child ( temp 4-component vector of float)
+0:8      Sequence
+0:8        move second child to first child ( temp 4-component vector of float)
 0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
-0:5          color: direct index for structure ( temp 4-component vector of float)
-0:5            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
-0:5            Constant:
-0:5              0 (const int)
+0:8          color: direct index for structure ( temp 4-component vector of float)
+0:8            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:8            Constant:
+0:8              0 (const int)
 0:?   Linker Objects
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 54
+// Id's are bound by 62
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 51
+                              EntryPoint Fragment 4  "main" 59
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -218,9 +278,15 @@
                               Name 35  "r10"
                               Name 36  "r11"
                               Name 38  "r12"
-                              Name 40  "ps_output"
-                              Name 51  "@entryPointOutput.color"
-                              Decorate 51(@entryPointOutput.color) Location 0
+                              Name 39  "r13"
+                              Name 40  "r14"
+                              Name 41  "r15"
+                              Name 43  "r16"
+                              Name 45  "r17"
+                              Name 46  "r18"
+                              Name 48  "ps_output"
+                              Name 59  "@entryPointOutput.color"
+                              Decorate 59(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -241,16 +307,18 @@
               31:     24(int) Constant 57
               33:     15(int) Constant 58
               37:    6(float) Constant 1066192077
-              39:             TypePointer Function 8(PS_OUTPUT)
-              41:     24(int) Constant 0
-              45:             TypePointer Function 7(fvec4)
-              50:             TypePointer Output 7(fvec4)
-51(@entryPointOutput.color):     50(ptr) Variable Output
+              42:     24(int) Constant 3
+              44:     24(int) Constant 4
+              47:             TypePointer Function 8(PS_OUTPUT)
+              49:     24(int) Constant 0
+              53:             TypePointer Function 7(fvec4)
+              58:             TypePointer Output 7(fvec4)
+59(@entryPointOutput.color):     58(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              52:8(PS_OUTPUT) FunctionCall 10(@main()
-              53:    7(fvec4) CompositeExtract 52 0
-                              Store 51(@entryPointOutput.color) 53
+              60:8(PS_OUTPUT) FunctionCall 10(@main()
+              61:    7(fvec4) CompositeExtract 60 0
+                              Store 59(@entryPointOutput.color) 61
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
@@ -268,7 +336,13 @@
          35(r10):     12(ptr) Variable Function
          36(r11):     12(ptr) Variable Function
          38(r12):     12(ptr) Variable Function
-   40(ps_output):     39(ptr) Variable Function
+         39(r13):     16(ptr) Variable Function
+         40(r14):     16(ptr) Variable Function
+         41(r15):     25(ptr) Variable Function
+         43(r16):     25(ptr) Variable Function
+         45(r17):     16(ptr) Variable Function
+         46(r18):     25(ptr) Variable Function
+   48(ps_output):     47(ptr) Variable Function
                               Store 13(r00) 14
                               Store 17(r01) 18
                               Store 19(r02) 20
@@ -282,11 +356,17 @@
                               Store 35(r10) 14
                               Store 36(r11) 37
                               Store 38(r12) 37
-              42:     24(int) Load 30(r07)
-              43:    6(float) ConvertSToF 42
-              44:    7(fvec4) CompositeConstruct 43 43 43 43
-              46:     45(ptr) AccessChain 40(ps_output) 41
-                              Store 46 44
-              47:8(PS_OUTPUT) Load 40(ps_output)
-                              ReturnValue 47
+                              Store 39(r13) 18
+                              Store 40(r14) 20
+                              Store 41(r15) 42
+                              Store 43(r16) 44
+                              Store 45(r17) 18
+                              Store 46(r18) 42
+              50:     24(int) Load 30(r07)
+              51:    6(float) ConvertSToF 50
+              52:    7(fvec4) CompositeConstruct 51 51 51 51
+              54:     53(ptr) AccessChain 48(ps_output) 49
+                              Store 54 52
+              55:8(PS_OUTPUT) Load 48(ps_output)
+                              ReturnValue 55
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.numericsuffixes.negative.frag.out b/Test/baseResults/hlsl.numericsuffixes.negative.frag.out
new file mode 100644
index 0000000..60d63e9
--- /dev/null
+++ b/Test/baseResults/hlsl.numericsuffixes.negative.frag.out
@@ -0,0 +1,109 @@
+hlsl.numericsuffixes.negative.frag
+ERROR: 0:7: '' : bad digit in binary literal 
+ERROR: 0:8: '' : binary literal too big 
+ERROR: 0:9: '' : bad digit in hexadecimal literal 
+ERROR: 0:10: '' : hexadecimal literal too big 
+ERROR: 4 compilation errors.  No code generated.
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:5  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:5    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp uint)
+0:7          'r01' ( temp uint)
+0:7          Constant:
+0:7            0 (const uint)
+0:8      Sequence
+0:8        move second child to first child ( temp uint)
+0:8          'r02' ( temp uint)
+0:8          Constant:
+0:8            4294967295 (const uint)
+0:10      Sequence
+0:9        move second child to first child ( temp uint)
+0:9          'r03' ( temp uint)
+0:9          Constant:
+0:9            0 (const uint)
+0:10        move second child to first child ( temp uint)
+0:10          'r04' ( temp uint)
+0:10          Constant:
+0:10            4294967295 (const uint)
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        color: direct index for structure ( temp 4-component vector of float)
+0:13          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:13          Constant:
+0:13            0 (const int)
+0:13        Construct vec4 ( temp 4-component vector of float)
+0:13          Convert uint to float ( temp float)
+0:13            'r01' ( temp uint)
+0:14      Branch: Return with expression
+0:14        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:5          color: direct index for structure ( temp 4-component vector of float)
+0:5            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:5            Constant:
+0:5              0 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+ERROR: node is still EOpNull!
+0:5  Function Definition: @main( ( temp structure{ temp 4-component vector of float color})
+0:5    Function Parameters: 
+0:?     Sequence
+0:7      Sequence
+0:7        move second child to first child ( temp uint)
+0:7          'r01' ( temp uint)
+0:7          Constant:
+0:7            0 (const uint)
+0:8      Sequence
+0:8        move second child to first child ( temp uint)
+0:8          'r02' ( temp uint)
+0:8          Constant:
+0:8            4294967295 (const uint)
+0:10      Sequence
+0:9        move second child to first child ( temp uint)
+0:9          'r03' ( temp uint)
+0:9          Constant:
+0:9            0 (const uint)
+0:10        move second child to first child ( temp uint)
+0:10          'r04' ( temp uint)
+0:10          Constant:
+0:10            4294967295 (const uint)
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        color: direct index for structure ( temp 4-component vector of float)
+0:13          'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:13          Constant:
+0:13            0 (const int)
+0:13        Construct vec4 ( temp 4-component vector of float)
+0:13          Convert uint to float ( temp float)
+0:13            'r01' ( temp uint)
+0:14      Branch: Return with expression
+0:14        'ps_output' ( temp structure{ temp 4-component vector of float color})
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      Sequence
+0:5        move second child to first child ( temp 4-component vector of float)
+0:?           '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+0:5          color: direct index for structure ( temp 4-component vector of float)
+0:5            Function Call: @main( ( temp structure{ temp 4-component vector of float color})
+0:5            Constant:
+0:5              0 (const int)
+0:?   Linker Objects
+0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/hlsl.structcopy.comp.out b/Test/baseResults/hlsl.structcopy.comp.out
new file mode 100644
index 0000000..afc03e0
--- /dev/null
+++ b/Test/baseResults/hlsl.structcopy.comp.out
@@ -0,0 +1,402 @@
+hlsl.structcopy.comp
+Shader version: 500
+local_size = (128, 1, 1)
+0:? Sequence
+0:20  Function Definition: @main(u1; ( temp void)
+0:20    Function Parameters: 
+0:20      'id' ( in uint)
+0:?     Sequence
+0:21      move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21        direct index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          Constant:
+0:21            0 (const int)
+0:21        Constant:
+0:21          1 (const uint)
+0:21          2 (const uint)
+0:21          3 (const uint)
+0:22      Sequence
+0:22        move second child to first child ( temp uint)
+0:22          'count' ( temp uint)
+0:22          count: direct index for structure ( temp uint)
+0:22            direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22                'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:23      Sequence
+0:23        move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          Test condition and select ( temp structure{ temp uint a,  temp uint b,  temp uint c}): no shortcircuit
+0:23            Condition
+0:23            Compare Greater Than ( temp bool)
+0:23              'id' ( in uint)
+0:23              'count' ( temp uint)
+0:23            true case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              subtract ( temp uint)
+0:23                'id' ( in uint)
+0:23                'count' ( temp uint)
+0:23            false case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23                direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                    'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:23                    Constant:
+0:23                      0 (const uint)
+0:23                  Constant:
+0:23                    0 (const int)
+0:23                Constant:
+0:23                  1 (const int)
+0:23              'id' ( in uint)
+0:25      AtomicAdd ( temp uint)
+0:25        a: direct index for structure ( temp uint)
+0:25          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:25            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:25              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:25              Constant:
+0:25                0 (const uint)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        a: direct index for structure ( temp uint)
+0:25          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:25          Constant:
+0:25            0 (const int)
+0:26      AtomicAdd ( temp uint)
+0:26        b: direct index for structure ( temp uint)
+0:26          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:26            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:26              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:26              Constant:
+0:26                0 (const uint)
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        b: direct index for structure ( temp uint)
+0:26          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:26          Constant:
+0:26            1 (const int)
+0:27      AtomicAdd ( temp uint)
+0:27        c: direct index for structure ( temp uint)
+0:27          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:27            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:27              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:27              Constant:
+0:27                0 (const uint)
+0:27            Constant:
+0:27              0 (const int)
+0:27          Constant:
+0:27            2 (const int)
+0:27        c: direct index for structure ( temp uint)
+0:27          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:27          Constant:
+0:27            2 (const int)
+0:20  Function Definition: main( ( temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint LocalInvocationIndex)
+0:20      Function Call: @main(u1; ( temp void)
+0:?         'id' ( temp uint)
+0:?   Linker Objects
+0:?     'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:?     'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:?     's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:?     'deflt' ( const structure{ temp uint a,  temp uint b,  temp uint c})
+0:?       1 (const uint)
+0:?       2 (const uint)
+0:?       3 (const uint)
+0:?     'id' ( in uint LocalInvocationIndex)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (128, 1, 1)
+0:? Sequence
+0:20  Function Definition: @main(u1; ( temp void)
+0:20    Function Parameters: 
+0:20      'id' ( in uint)
+0:?     Sequence
+0:21      move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21        direct index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          Constant:
+0:21            0 (const int)
+0:21        Constant:
+0:21          1 (const uint)
+0:21          2 (const uint)
+0:21          3 (const uint)
+0:22      Sequence
+0:22        move second child to first child ( temp uint)
+0:22          'count' ( temp uint)
+0:22          count: direct index for structure ( temp uint)
+0:22            direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22                'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:23      Sequence
+0:23        move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          Test condition and select ( temp structure{ temp uint a,  temp uint b,  temp uint c}): no shortcircuit
+0:23            Condition
+0:23            Compare Greater Than ( temp bool)
+0:23              'id' ( in uint)
+0:23              'count' ( temp uint)
+0:23            true case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              subtract ( temp uint)
+0:23                'id' ( in uint)
+0:23                'count' ( temp uint)
+0:23            false case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23                direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                    'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:23                    Constant:
+0:23                      0 (const uint)
+0:23                  Constant:
+0:23                    0 (const int)
+0:23                Constant:
+0:23                  1 (const int)
+0:23              'id' ( in uint)
+0:25      AtomicAdd ( temp uint)
+0:25        a: direct index for structure ( temp uint)
+0:25          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:25            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:25              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:25              Constant:
+0:25                0 (const uint)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        a: direct index for structure ( temp uint)
+0:25          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:25          Constant:
+0:25            0 (const int)
+0:26      AtomicAdd ( temp uint)
+0:26        b: direct index for structure ( temp uint)
+0:26          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:26            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:26              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:26              Constant:
+0:26                0 (const uint)
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        b: direct index for structure ( temp uint)
+0:26          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:26          Constant:
+0:26            1 (const int)
+0:27      AtomicAdd ( temp uint)
+0:27        c: direct index for structure ( temp uint)
+0:27          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:27            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:27              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:27              Constant:
+0:27                0 (const uint)
+0:27            Constant:
+0:27              0 (const int)
+0:27          Constant:
+0:27            2 (const int)
+0:27        c: direct index for structure ( temp uint)
+0:27          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:27          Constant:
+0:27            2 (const int)
+0:20  Function Definition: main( ( temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint LocalInvocationIndex)
+0:20      Function Call: @main(u1; ( temp void)
+0:?         'id' ( temp uint)
+0:?   Linker Objects
+0:?     'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:?     'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:?     's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:?     'deflt' ( const structure{ temp uint a,  temp uint b,  temp uint c})
+0:?       1 (const uint)
+0:?       2 (const uint)
+0:?       3 (const uint)
+0:?     'id' ( in uint LocalInvocationIndex)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 88
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 83
+                              ExecutionMode 4 LocalSize 128 1 1
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 10  "@main(u1;"
+                              Name 9  "id"
+                              Name 12  "MyStruct"
+                              MemberName 12(MyStruct) 0  "a"
+                              MemberName 12(MyStruct) 1  "b"
+                              MemberName 12(MyStruct) 2  "c"
+                              Name 16  "s"
+                              Name 25  "count"
+                              Name 26  "MyStruct"
+                              MemberName 26(MyStruct) 0  "a"
+                              MemberName 26(MyStruct) 1  "b"
+                              MemberName 26(MyStruct) 2  "c"
+                              Name 28  "MyStructs"
+                              MemberName 28(MyStructs) 0  "count"
+                              MemberName 28(MyStructs) 1  "data"
+                              Name 30  "sb"
+                              MemberName 30(sb) 0  "@data"
+                              Name 32  "sb"
+                              Name 37  "ms"
+                              Name 65  "o"
+                              MemberName 65(o) 0  "@data"
+                              Name 67  "o"
+                              Name 81  "id"
+                              Name 83  "id"
+                              Name 85  "param"
+                              MemberDecorate 26(MyStruct) 0 Offset 0
+                              MemberDecorate 26(MyStruct) 1 Offset 4
+                              MemberDecorate 26(MyStruct) 2 Offset 8
+                              Decorate 27 ArrayStride 12
+                              MemberDecorate 28(MyStructs) 0 Offset 0
+                              MemberDecorate 28(MyStructs) 1 Offset 4
+                              Decorate 28(MyStructs) BufferBlock
+                              Decorate 29 ArrayStride 16
+                              MemberDecorate 30(sb) 0 NonWritable
+                              MemberDecorate 30(sb) 0 Offset 0
+                              Decorate 30(sb) BufferBlock
+                              Decorate 32(sb) DescriptorSet 0
+                              Decorate 32(sb) Binding 0
+                              Decorate 64 ArrayStride 12
+                              MemberDecorate 65(o) 0 NonWritable
+                              MemberDecorate 65(o) 0 Offset 0
+                              Decorate 65(o) BufferBlock
+                              Decorate 67(o) DescriptorSet 0
+                              Decorate 67(o) Binding 1
+                              Decorate 83(id) BuiltIn LocalInvocationIndex
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 2 7(ptr)
+    12(MyStruct):             TypeStruct 6(int) 6(int) 6(int)
+              13:      6(int) Constant 128
+              14:             TypeArray 12(MyStruct) 13
+              15:             TypePointer Workgroup 14
+           16(s):     15(ptr) Variable Workgroup
+              17:             TypeInt 32 1
+              18:     17(int) Constant 0
+              19:      6(int) Constant 1
+              20:      6(int) Constant 2
+              21:      6(int) Constant 3
+              22:12(MyStruct) ConstantComposite 19 20 21
+              23:             TypePointer Workgroup 12(MyStruct)
+    26(MyStruct):             TypeStruct 6(int) 6(int) 6(int)
+              27:             TypeRuntimeArray 26(MyStruct)
+   28(MyStructs):             TypeStruct 6(int) 27
+              29:             TypeRuntimeArray 28(MyStructs)
+          30(sb):             TypeStruct 29
+              31:             TypePointer Uniform 30(sb)
+          32(sb):     31(ptr) Variable Uniform
+              33:             TypePointer Uniform 6(int)
+              36:             TypePointer Function 12(MyStruct)
+              40:             TypeBool
+              47:     17(int) Constant 1
+              49:             TypePointer Uniform 26(MyStruct)
+              61:     17(int) Constant 2
+              64:             TypeRuntimeArray 26(MyStruct)
+           65(o):             TypeStruct 64
+              66:             TypePointer Uniform 65(o)
+           67(o):     66(ptr) Variable Uniform
+              71:      6(int) Constant 0
+              82:             TypePointer Input 6(int)
+          83(id):     82(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+          81(id):      7(ptr) Variable Function
+       85(param):      7(ptr) Variable Function
+              84:      6(int) Load 83(id)
+                              Store 81(id) 84
+              86:      6(int) Load 81(id)
+                              Store 85(param) 86
+              87:           2 FunctionCall 10(@main(u1;) 85(param)
+                              Return
+                              FunctionEnd
+   10(@main(u1;):           2 Function None 8
+           9(id):      7(ptr) FunctionParameter
+              11:             Label
+       25(count):      7(ptr) Variable Function
+          37(ms):     36(ptr) Variable Function
+              52:     36(ptr) Variable Function
+              24:     23(ptr) AccessChain 16(s) 18
+                              Store 24 22
+              34:     33(ptr) AccessChain 32(sb) 18 18 18
+              35:      6(int) Load 34
+                              Store 25(count) 35
+              38:      6(int) Load 9(id)
+              39:      6(int) Load 25(count)
+              41:    40(bool) UGreaterThan 38 39
+              42:      6(int) Load 9(id)
+              43:      6(int) Load 25(count)
+              44:      6(int) ISub 42 43
+              45:     23(ptr) AccessChain 16(s) 44
+              46:12(MyStruct) Load 45
+              48:      6(int) Load 9(id)
+              50:     49(ptr) AccessChain 32(sb) 18 18 47 48
+              51:26(MyStruct) Load 50
+                              SelectionMerge 54 None
+                              BranchConditional 41 53 55
+              53:               Label
+                                Store 52 46
+                                Branch 54
+              55:               Label
+              56:      6(int)   CompositeExtract 51 0
+              57:      7(ptr)   AccessChain 52 18
+                                Store 57 56
+              58:      6(int)   CompositeExtract 51 1
+              59:      7(ptr)   AccessChain 52 47
+                                Store 59 58
+              60:      6(int)   CompositeExtract 51 2
+              62:      7(ptr)   AccessChain 52 61
+                                Store 62 60
+                                Branch 54
+              54:             Label
+              63:12(MyStruct) Load 52
+                              Store 37(ms) 63
+              68:     33(ptr) AccessChain 67(o) 18 18 18
+              69:      7(ptr) AccessChain 37(ms) 18
+              70:      6(int) Load 69
+              72:      6(int) AtomicIAdd 68 19 71 70
+              73:     33(ptr) AccessChain 67(o) 18 18 47
+              74:      7(ptr) AccessChain 37(ms) 47
+              75:      6(int) Load 74
+              76:      6(int) AtomicIAdd 73 19 71 75
+              77:     33(ptr) AccessChain 67(o) 18 18 61
+              78:      7(ptr) AccessChain 37(ms) 61
+              79:      6(int) Load 78
+              80:      6(int) AtomicIAdd 77 19 71 79
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structcopylogical.comp.out b/Test/baseResults/hlsl.structcopylogical.comp.out
new file mode 100644
index 0000000..3120656
--- /dev/null
+++ b/Test/baseResults/hlsl.structcopylogical.comp.out
@@ -0,0 +1,385 @@
+hlsl.structcopylogical.comp
+Shader version: 500
+local_size = (128, 1, 1)
+0:? Sequence
+0:20  Function Definition: @main(u1; ( temp void)
+0:20    Function Parameters: 
+0:20      'id' ( in uint)
+0:?     Sequence
+0:21      move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21        direct index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          Constant:
+0:21            0 (const int)
+0:21        Constant:
+0:21          1 (const uint)
+0:21          2 (const uint)
+0:21          3 (const uint)
+0:22      Sequence
+0:22        move second child to first child ( temp uint)
+0:22          'count' ( temp uint)
+0:22          count: direct index for structure ( temp uint)
+0:22            direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22                'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:23      Sequence
+0:23        move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          Test condition and select ( temp structure{ temp uint a,  temp uint b,  temp uint c}): no shortcircuit
+0:23            Condition
+0:23            Compare Greater Than ( temp bool)
+0:23              'id' ( in uint)
+0:23              'count' ( temp uint)
+0:23            true case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              subtract ( temp uint)
+0:23                'id' ( in uint)
+0:23                'count' ( temp uint)
+0:23            false case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23                direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                    'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:23                    Constant:
+0:23                      0 (const uint)
+0:23                  Constant:
+0:23                    0 (const int)
+0:23                Constant:
+0:23                  1 (const int)
+0:23              'id' ( in uint)
+0:25      AtomicAdd ( temp uint)
+0:25        a: direct index for structure ( temp uint)
+0:25          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:25            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:25              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:25              Constant:
+0:25                0 (const uint)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        a: direct index for structure ( temp uint)
+0:25          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:25          Constant:
+0:25            0 (const int)
+0:26      AtomicAdd ( temp uint)
+0:26        b: direct index for structure ( temp uint)
+0:26          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:26            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:26              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:26              Constant:
+0:26                0 (const uint)
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        b: direct index for structure ( temp uint)
+0:26          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:26          Constant:
+0:26            1 (const int)
+0:27      AtomicAdd ( temp uint)
+0:27        c: direct index for structure ( temp uint)
+0:27          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:27            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:27              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:27              Constant:
+0:27                0 (const uint)
+0:27            Constant:
+0:27              0 (const int)
+0:27          Constant:
+0:27            2 (const int)
+0:27        c: direct index for structure ( temp uint)
+0:27          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:27          Constant:
+0:27            2 (const int)
+0:20  Function Definition: main( ( temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint LocalInvocationIndex)
+0:20      Function Call: @main(u1; ( temp void)
+0:?         'id' ( temp uint)
+0:?   Linker Objects
+0:?     'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:?     'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:?     's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:?     'deflt' ( const structure{ temp uint a,  temp uint b,  temp uint c})
+0:?       1 (const uint)
+0:?       2 (const uint)
+0:?       3 (const uint)
+0:?     'id' ( in uint LocalInvocationIndex)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (128, 1, 1)
+0:? Sequence
+0:20  Function Definition: @main(u1; ( temp void)
+0:20    Function Parameters: 
+0:20      'id' ( in uint)
+0:?     Sequence
+0:21      move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21        direct index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:21          Constant:
+0:21            0 (const int)
+0:21        Constant:
+0:21          1 (const uint)
+0:21          2 (const uint)
+0:21          3 (const uint)
+0:22      Sequence
+0:22        move second child to first child ( temp uint)
+0:22          'count' ( temp uint)
+0:22          count: direct index for structure ( temp uint)
+0:22            direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22              @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:22                'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:22                Constant:
+0:22                  0 (const uint)
+0:22              Constant:
+0:22                0 (const int)
+0:22            Constant:
+0:22              0 (const int)
+0:23      Sequence
+0:23        move second child to first child ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23          Test condition and select ( temp structure{ temp uint a,  temp uint b,  temp uint c}): no shortcircuit
+0:23            Condition
+0:23            Compare Greater Than ( temp bool)
+0:23              'id' ( in uint)
+0:23              'count' ( temp uint)
+0:23            true case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              subtract ( temp uint)
+0:23                'id' ( in uint)
+0:23                'count' ( temp uint)
+0:23            false case
+0:23            indirect index ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:23              data: direct index for structure ( temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:23                direct index (layout( row_major std430) buffer structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                  @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data})
+0:23                    'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:23                    Constant:
+0:23                      0 (const uint)
+0:23                  Constant:
+0:23                    0 (const int)
+0:23                Constant:
+0:23                  1 (const int)
+0:23              'id' ( in uint)
+0:25      AtomicAdd ( temp uint)
+0:25        a: direct index for structure ( temp uint)
+0:25          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:25            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:25              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:25              Constant:
+0:25                0 (const uint)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Constant:
+0:25            0 (const int)
+0:25        a: direct index for structure ( temp uint)
+0:25          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:25          Constant:
+0:25            0 (const int)
+0:26      AtomicAdd ( temp uint)
+0:26        b: direct index for structure ( temp uint)
+0:26          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:26            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:26              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:26              Constant:
+0:26                0 (const uint)
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            1 (const int)
+0:26        b: direct index for structure ( temp uint)
+0:26          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:26          Constant:
+0:26            1 (const int)
+0:27      AtomicAdd ( temp uint)
+0:27        c: direct index for structure ( temp uint)
+0:27          direct index (layout( row_major std430) buffer structure{ temp uint a,  temp uint b,  temp uint c})
+0:27            @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:27              'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:27              Constant:
+0:27                0 (const uint)
+0:27            Constant:
+0:27              0 (const int)
+0:27          Constant:
+0:27            2 (const int)
+0:27        c: direct index for structure ( temp uint)
+0:27          'ms' ( temp structure{ temp uint a,  temp uint b,  temp uint c})
+0:27          Constant:
+0:27            2 (const int)
+0:20  Function Definition: main( ( temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      move second child to first child ( temp uint)
+0:?         'id' ( temp uint)
+0:?         'id' ( in uint LocalInvocationIndex)
+0:20      Function Call: @main(u1; ( temp void)
+0:?         'id' ( temp uint)
+0:?   Linker Objects
+0:?     'sb' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint count,  temp unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} data} @data})
+0:?     'o' (layout( row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp uint a,  temp uint b,  temp uint c} @data})
+0:?     's' ( shared 128-element array of structure{ temp uint a,  temp uint b,  temp uint c})
+0:?     'deflt' ( const structure{ temp uint a,  temp uint b,  temp uint c})
+0:?       1 (const uint)
+0:?       2 (const uint)
+0:?       3 (const uint)
+0:?     'id' ( in uint LocalInvocationIndex)
+
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 79
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 17 32 57 74
+                              ExecutionModeId 4 LocalSizeId 7 8 8
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 12  "@main(u1;"
+                              Name 11  "id"
+                              Name 14  "MyStruct"
+                              MemberName 14(MyStruct) 0  "a"
+                              MemberName 14(MyStruct) 1  "b"
+                              MemberName 14(MyStruct) 2  "c"
+                              Name 17  "s"
+                              Name 25  "count"
+                              Name 26  "MyStruct"
+                              MemberName 26(MyStruct) 0  "a"
+                              MemberName 26(MyStruct) 1  "b"
+                              MemberName 26(MyStruct) 2  "c"
+                              Name 28  "MyStructs"
+                              MemberName 28(MyStructs) 0  "count"
+                              MemberName 28(MyStructs) 1  "data"
+                              Name 30  "sb"
+                              MemberName 30(sb) 0  "@data"
+                              Name 32  "sb"
+                              Name 37  "ms"
+                              Name 55  "o"
+                              MemberName 55(o) 0  "@data"
+                              Name 57  "o"
+                              Name 72  "id"
+                              Name 74  "id"
+                              Name 76  "param"
+                              MemberDecorate 26(MyStruct) 0 Offset 0
+                              MemberDecorate 26(MyStruct) 1 Offset 4
+                              MemberDecorate 26(MyStruct) 2 Offset 8
+                              Decorate 27 ArrayStride 12
+                              MemberDecorate 28(MyStructs) 0 Offset 0
+                              MemberDecorate 28(MyStructs) 1 Offset 4
+                              Decorate 28(MyStructs) Block
+                              Decorate 29 ArrayStride 16
+                              MemberDecorate 30(sb) 0 NonWritable
+                              MemberDecorate 30(sb) 0 Offset 0
+                              Decorate 30(sb) Block
+                              Decorate 32(sb) DescriptorSet 0
+                              Decorate 32(sb) Binding 0
+                              Decorate 54 ArrayStride 12
+                              MemberDecorate 55(o) 0 NonWritable
+                              MemberDecorate 55(o) 0 Offset 0
+                              Decorate 55(o) Block
+                              Decorate 57(o) DescriptorSet 0
+                              Decorate 57(o) Binding 1
+                              Decorate 74(id) BuiltIn LocalInvocationIndex
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) Constant 128
+               8:      6(int) Constant 1
+               9:             TypePointer Function 6(int)
+              10:             TypeFunction 2 9(ptr)
+    14(MyStruct):             TypeStruct 6(int) 6(int) 6(int)
+              15:             TypeArray 14(MyStruct) 7
+              16:             TypePointer Workgroup 15
+           17(s):     16(ptr) Variable Workgroup
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:      6(int) Constant 2
+              21:      6(int) Constant 3
+              22:14(MyStruct) ConstantComposite 8 20 21
+              23:             TypePointer Workgroup 14(MyStruct)
+    26(MyStruct):             TypeStruct 6(int) 6(int) 6(int)
+              27:             TypeRuntimeArray 26(MyStruct)
+   28(MyStructs):             TypeStruct 6(int) 27
+              29:             TypeRuntimeArray 28(MyStructs)
+          30(sb):             TypeStruct 29
+              31:             TypePointer StorageBuffer 30(sb)
+          32(sb):     31(ptr) Variable StorageBuffer
+              33:             TypePointer StorageBuffer 6(int)
+              36:             TypePointer Function 14(MyStruct)
+              40:             TypeBool
+              47:     18(int) Constant 1
+              49:             TypePointer StorageBuffer 26(MyStruct)
+              54:             TypeRuntimeArray 26(MyStruct)
+           55(o):             TypeStruct 54
+              56:             TypePointer StorageBuffer 55(o)
+           57(o):     56(ptr) Variable StorageBuffer
+              61:      6(int) Constant 0
+              67:     18(int) Constant 2
+              73:             TypePointer Input 6(int)
+          74(id):     73(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+          72(id):      9(ptr) Variable Function
+       76(param):      9(ptr) Variable Function
+              75:      6(int) Load 74(id)
+                              Store 72(id) 75
+              77:      6(int) Load 72(id)
+                              Store 76(param) 77
+              78:           2 FunctionCall 12(@main(u1;) 76(param)
+                              Return
+                              FunctionEnd
+   12(@main(u1;):           2 Function None 10
+          11(id):      9(ptr) FunctionParameter
+              13:             Label
+       25(count):      9(ptr) Variable Function
+          37(ms):     36(ptr) Variable Function
+              24:     23(ptr) AccessChain 17(s) 19
+                              Store 24 22
+              34:     33(ptr) AccessChain 32(sb) 19 19 19
+              35:      6(int) Load 34
+                              Store 25(count) 35
+              38:      6(int) Load 11(id)
+              39:      6(int) Load 25(count)
+              41:    40(bool) UGreaterThan 38 39
+              42:      6(int) Load 11(id)
+              43:      6(int) Load 25(count)
+              44:      6(int) ISub 42 43
+              45:     23(ptr) AccessChain 17(s) 44
+              46:14(MyStruct) Load 45
+              48:      6(int) Load 11(id)
+              50:     49(ptr) AccessChain 32(sb) 19 19 47 48
+              51:26(MyStruct) Load 50
+              52:14(MyStruct) CopyLogical 51
+              53:14(MyStruct) Select 41 46 52
+                              Store 37(ms) 53
+              58:     33(ptr) AccessChain 57(o) 19 19 19
+              59:      9(ptr) AccessChain 37(ms) 19
+              60:      6(int) Load 59
+              62:      6(int) AtomicIAdd 58 8 61 60
+              63:     33(ptr) AccessChain 57(o) 19 19 47
+              64:      9(ptr) AccessChain 37(ms) 47
+              65:      6(int) Load 64
+              66:      6(int) AtomicIAdd 63 8 61 65
+              68:     33(ptr) AccessChain 57(o) 19 19 67
+              69:      9(ptr) AccessChain 37(ms) 67
+              70:      6(int) Load 69
+              71:      6(int) AtomicIAdd 68 8 61 70
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
index 49d3b87..ed35cba 100644
--- a/Test/baseResults/hlsl.wavebroadcast.comp.out
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -2331,7 +2331,7 @@
                               MemberDecorate 20(Types) 3 Offset 64
                               Decorate 21 ArrayStride 96
                               MemberDecorate 22(data) 0 Offset 0
-                              Decorate 22(data) BufferBlock
+                              Decorate 22(data) Block
                               Decorate 24(data) DescriptorSet 0
                               Decorate 24(data) Binding 0
                               Decorate 388(dti) BuiltIn GlobalInvocationId
@@ -2351,31 +2351,31 @@
        20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4)
               21:             TypeRuntimeArray 20(Types)
         22(data):             TypeStruct 21
-              23:             TypePointer Uniform 22(data)
-        24(data):     23(ptr) Variable Uniform
+              23:             TypePointer StorageBuffer 22(data)
+        24(data):     23(ptr) Variable StorageBuffer
               25:     14(int) Constant 0
               26:      6(int) Constant 0
               27:             TypePointer Function 6(int)
-              32:             TypePointer Uniform 13(ivec4)
+              32:             TypePointer StorageBuffer 13(ivec4)
               35:      6(int) Constant 13
               36:      6(int) Constant 3
-              43:             TypePointer Uniform 6(int)
+              43:             TypePointer StorageBuffer 6(int)
               52:             TypeVector 6(int) 2
               59:      6(int) Constant 1
               74:      6(int) Constant 2
               79:     14(int) Constant 1
-              82:             TypePointer Uniform 15(ivec4)
-              91:             TypePointer Uniform 14(int)
+              82:             TypePointer StorageBuffer 15(ivec4)
+              91:             TypePointer StorageBuffer 14(int)
              100:             TypeVector 14(int) 2
              113:             TypeVector 14(int) 3
              126:     14(int) Constant 2
-             129:             TypePointer Uniform 17(fvec4)
-             138:             TypePointer Uniform 16(float)
+             129:             TypePointer StorageBuffer 17(fvec4)
+             138:             TypePointer StorageBuffer 16(float)
              147:             TypeVector 16(float) 2
              160:             TypeVector 16(float) 3
              173:     14(int) Constant 3
-             176:             TypePointer Uniform 19(f64vec4)
-             185:             TypePointer Uniform 18(float64_t)
+             176:             TypePointer StorageBuffer 19(f64vec4)
+             185:             TypePointer StorageBuffer 18(float64_t)
              194:             TypeVector 18(float64_t) 2
              207:             TypeVector 18(float64_t) 3
              387:             TypePointer Input 7(ivec3)
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
index e2991bf..ecc1b3e 100644
--- a/Test/baseResults/hlsl.waveprefix.comp.out
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -2355,7 +2355,7 @@
                               MemberDecorate 20(Types) 3 Offset 64
                               Decorate 21 ArrayStride 96
                               MemberDecorate 22(data) 0 Offset 0
-                              Decorate 22(data) BufferBlock
+                              Decorate 22(data) Block
                               Decorate 24(data) DescriptorSet 0
                               Decorate 24(data) Binding 0
                               Decorate 398(dti) BuiltIn GlobalInvocationId
@@ -2375,30 +2375,30 @@
        20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4)
               21:             TypeRuntimeArray 20(Types)
         22(data):             TypeStruct 21
-              23:             TypePointer Uniform 22(data)
-        24(data):     23(ptr) Variable Uniform
+              23:             TypePointer StorageBuffer 22(data)
+        24(data):     23(ptr) Variable StorageBuffer
               25:     14(int) Constant 0
               26:      6(int) Constant 0
               27:             TypePointer Function 6(int)
-              32:             TypePointer Uniform 13(ivec4)
+              32:             TypePointer StorageBuffer 13(ivec4)
               35:      6(int) Constant 3
-              42:             TypePointer Uniform 6(int)
+              42:             TypePointer StorageBuffer 6(int)
               51:             TypeVector 6(int) 2
               58:      6(int) Constant 1
               73:      6(int) Constant 2
               78:     14(int) Constant 1
-              81:             TypePointer Uniform 15(ivec4)
-              90:             TypePointer Uniform 14(int)
+              81:             TypePointer StorageBuffer 15(ivec4)
+              90:             TypePointer StorageBuffer 14(int)
               99:             TypeVector 14(int) 2
              112:             TypeVector 14(int) 3
              125:     14(int) Constant 2
-             128:             TypePointer Uniform 17(fvec4)
-             137:             TypePointer Uniform 16(float)
+             128:             TypePointer StorageBuffer 17(fvec4)
+             137:             TypePointer StorageBuffer 16(float)
              146:             TypeVector 16(float) 2
              159:             TypeVector 16(float) 3
              172:     14(int) Constant 3
-             175:             TypePointer Uniform 19(f64vec4)
-             184:             TypePointer Uniform 18(float64_t)
+             175:             TypePointer StorageBuffer 19(f64vec4)
+             184:             TypePointer StorageBuffer 18(float64_t)
              193:             TypeVector 18(float64_t) 2
              206:             TypeVector 18(float64_t) 3
              391:             TypeBool
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
index 6d4ab5b..7deb7c7 100644
--- a/Test/baseResults/hlsl.wavequad.comp.out
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -8058,7 +8058,7 @@
                               MemberDecorate 20(Types) 3 Offset 64
                               Decorate 21 ArrayStride 96
                               MemberDecorate 22(data) 0 Offset 0
-                              Decorate 22(data) BufferBlock
+                              Decorate 22(data) Block
                               Decorate 24(data) DescriptorSet 0
                               Decorate 24(data) Binding 0
                               Decorate 1227(dti) BuiltIn GlobalInvocationId
@@ -8078,30 +8078,30 @@
        20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4)
               21:             TypeRuntimeArray 20(Types)
         22(data):             TypeStruct 21
-              23:             TypePointer Uniform 22(data)
-        24(data):     23(ptr) Variable Uniform
+              23:             TypePointer StorageBuffer 22(data)
+        24(data):     23(ptr) Variable StorageBuffer
               25:     14(int) Constant 0
               26:      6(int) Constant 0
               27:             TypePointer Function 6(int)
-              32:             TypePointer Uniform 13(ivec4)
+              32:             TypePointer StorageBuffer 13(ivec4)
               35:      6(int) Constant 3
-              42:             TypePointer Uniform 6(int)
+              42:             TypePointer StorageBuffer 6(int)
               51:             TypeVector 6(int) 2
               58:      6(int) Constant 1
               73:      6(int) Constant 2
               78:     14(int) Constant 1
-              81:             TypePointer Uniform 15(ivec4)
-              90:             TypePointer Uniform 14(int)
+              81:             TypePointer StorageBuffer 15(ivec4)
+              90:             TypePointer StorageBuffer 14(int)
               99:             TypeVector 14(int) 2
              112:             TypeVector 14(int) 3
              125:     14(int) Constant 2
-             128:             TypePointer Uniform 17(fvec4)
-             137:             TypePointer Uniform 16(float)
+             128:             TypePointer StorageBuffer 17(fvec4)
+             137:             TypePointer StorageBuffer 16(float)
              146:             TypeVector 16(float) 2
              159:             TypeVector 16(float) 3
              172:     14(int) Constant 3
-             175:             TypePointer Uniform 19(f64vec4)
-             184:             TypePointer Uniform 18(float64_t)
+             175:             TypePointer StorageBuffer 19(f64vec4)
+             184:             TypePointer StorageBuffer 18(float64_t)
              193:             TypeVector 18(float64_t) 2
              206:             TypeVector 18(float64_t) 3
             1226:             TypePointer Input 7(ivec3)
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
index a380808..8e08b09 100644
--- a/Test/baseResults/hlsl.wavequery.comp.out
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -79,7 +79,7 @@
                               Name 21  "@gl_SubgroupSize"
                               Decorate 9 ArrayStride 4
                               MemberDecorate 10(data) 0 Offset 0
-                              Decorate 10(data) BufferBlock
+                              Decorate 10(data) Block
                               Decorate 12(data) DescriptorSet 0
                               Decorate 12(data) Binding 0
                               Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
@@ -89,8 +89,8 @@
                8:             TypeInt 32 0
                9:             TypeRuntimeArray 8(int)
         10(data):             TypeStruct 9
-              11:             TypePointer Uniform 10(data)
-        12(data):     11(ptr) Variable Uniform
+              11:             TypePointer StorageBuffer 10(data)
+        12(data):     11(ptr) Variable StorageBuffer
               13:             TypeInt 32 1
               14:     13(int) Constant 0
               15:             TypePointer Input 8(int)
@@ -99,7 +99,7 @@
               19:      8(int) Constant 3
 21(@gl_SubgroupSize):     15(ptr) Variable Input
               23:      8(int) Constant 0
-              25:             TypePointer Uniform 8(int)
+              25:             TypePointer StorageBuffer 8(int)
        4(CSMain):           2 Function None 3
                5:             Label
               27:           2 FunctionCall 6(@CSMain()
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
index a4393fe..9a636f5 100644
--- a/Test/baseResults/hlsl.wavereduction.comp.out
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -6219,7 +6219,7 @@
                               MemberDecorate 20(Types) 3 Offset 64
                               Decorate 21 ArrayStride 96
                               MemberDecorate 22(data) 0 Offset 0
-                              Decorate 22(data) BufferBlock
+                              Decorate 22(data) Block
                               Decorate 24(data) DescriptorSet 0
                               Decorate 24(data) Binding 0
                               Decorate 986(dti) BuiltIn GlobalInvocationId
@@ -6239,30 +6239,30 @@
        20(Types):             TypeStruct 13(ivec4) 15(ivec4) 17(fvec4) 19(f64vec4)
               21:             TypeRuntimeArray 20(Types)
         22(data):             TypeStruct 21
-              23:             TypePointer Uniform 22(data)
-        24(data):     23(ptr) Variable Uniform
+              23:             TypePointer StorageBuffer 22(data)
+        24(data):     23(ptr) Variable StorageBuffer
               25:     14(int) Constant 0
               26:      6(int) Constant 0
               27:             TypePointer Function 6(int)
-              32:             TypePointer Uniform 13(ivec4)
+              32:             TypePointer StorageBuffer 13(ivec4)
               35:      6(int) Constant 3
-              42:             TypePointer Uniform 6(int)
+              42:             TypePointer StorageBuffer 6(int)
               51:             TypeVector 6(int) 2
               58:      6(int) Constant 1
               73:      6(int) Constant 2
               78:     14(int) Constant 1
-              81:             TypePointer Uniform 15(ivec4)
-              90:             TypePointer Uniform 14(int)
+              81:             TypePointer StorageBuffer 15(ivec4)
+              90:             TypePointer StorageBuffer 14(int)
               99:             TypeVector 14(int) 2
              112:             TypeVector 14(int) 3
              125:     14(int) Constant 2
-             128:             TypePointer Uniform 17(fvec4)
-             137:             TypePointer Uniform 16(float)
+             128:             TypePointer StorageBuffer 17(fvec4)
+             137:             TypePointer StorageBuffer 16(float)
              146:             TypeVector 16(float) 2
              159:             TypeVector 16(float) 3
              172:     14(int) Constant 3
-             175:             TypePointer Uniform 19(f64vec4)
-             184:             TypePointer Uniform 18(float64_t)
+             175:             TypePointer StorageBuffer 19(f64vec4)
+             184:             TypePointer StorageBuffer 18(float64_t)
              193:             TypeVector 18(float64_t) 2
              206:             TypeVector 18(float64_t) 3
              979:             TypeBool
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
index f9382b7..382f504 100644
--- a/Test/baseResults/hlsl.wavevote.comp.out
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -228,7 +228,7 @@
                               Name 72  "param"
                               Decorate 14 ArrayStride 8
                               MemberDecorate 15(data) 0 Offset 0
-                              Decorate 15(data) BufferBlock
+                              Decorate 15(data) Block
                               Decorate 17(data) DescriptorSet 0
                               Decorate 17(data) Binding 0
                               Decorate 70(dti) BuiltIn GlobalInvocationId
@@ -241,8 +241,8 @@
               13:             TypeInt 64 0
               14:             TypeRuntimeArray 13(int64_t)
         15(data):             TypeStruct 14
-              16:             TypePointer Uniform 15(data)
-        17(data):     16(ptr) Variable Uniform
+              16:             TypePointer StorageBuffer 15(data)
+        17(data):     16(ptr) Variable StorageBuffer
               18:             TypeInt 32 1
               19:     18(int) Constant 0
               20:      6(int) Constant 0
@@ -251,7 +251,7 @@
               28:      6(int) Constant 3
               30:             TypeVector 6(int) 4
               32:             TypeVector 13(int64_t) 4
-              35:             TypePointer Uniform 13(int64_t)
+              35:             TypePointer StorageBuffer 13(int64_t)
               37:      6(int) Constant 1
               48:      6(int) Constant 2
               69:             TypePointer Input 7(ivec3)
diff --git a/Test/baseResults/implicitArraySize.vert.out b/Test/baseResults/implicitArraySize.vert.out
new file mode 100644
index 0000000..9a71b87
--- /dev/null
+++ b/Test/baseResults/implicitArraySize.vert.out
@@ -0,0 +1,115 @@
+implicitArraySize.vert
+Shader version: 460
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:6    Sequence
+0:6      move second child to first child ( temp float)
+0:6        direct index ( smooth temp float)
+0:6          'a' ( smooth out unsized 1-element array of float)
+0:6          Constant:
+0:6            0 (const int)
+0:6        Constant:
+0:6          0.100000
+0:7      move second child to first child ( temp float)
+0:7        direct index ( smooth temp float)
+0:7          'c' ( smooth out unsized 6-element array of float)
+0:7          Constant:
+0:7            5 (const int)
+0:7        Constant:
+0:7          0.100000
+0:?   Linker Objects
+0:?     'a' ( smooth out unsized 1-element array of float)
+0:?     'c' ( smooth out unsized 6-element array of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+implicitArraySize.frag
+Shader version: 460
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:7    Sequence
+0:7      move second child to first child ( temp float)
+0:7        direct index ( temp float)
+0:7          'b' ( out 5-element array of float)
+0:7          Constant:
+0:7            0 (const int)
+0:7        direct index ( smooth temp float)
+0:7          'a' ( smooth in unsized 2-element array of float)
+0:7          Constant:
+0:7            1 (const int)
+0:8      move second child to first child ( temp float)
+0:8        direct index ( temp float)
+0:8          'b' ( out 5-element array of float)
+0:8          Constant:
+0:8            1 (const int)
+0:8        direct index ( smooth temp float)
+0:8          'c' ( smooth in 3-element array of float)
+0:8          Constant:
+0:8            1 (const int)
+0:?   Linker Objects
+0:?     'a' ( smooth in unsized 2-element array of float)
+0:?     'c' ( smooth in 3-element array of float)
+0:?     'b' ( out 5-element array of float)
+
+
+Linked vertex stage:
+
+
+Linked fragment stage:
+
+ERROR: Linking vertex stage: Implicit size of unsized array doesn't match same symbol among multiple shaders.
+
+Shader version: 460
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:6    Sequence
+0:6      move second child to first child ( temp float)
+0:6        direct index ( smooth temp float)
+0:6          'a' ( smooth out 1-element array of float)
+0:6          Constant:
+0:6            0 (const int)
+0:6        Constant:
+0:6          0.100000
+0:7      move second child to first child ( temp float)
+0:7        direct index ( smooth temp float)
+0:7          'c' ( smooth out 6-element array of float)
+0:7          Constant:
+0:7            5 (const int)
+0:7        Constant:
+0:7          0.100000
+0:?   Linker Objects
+0:?     'a' ( smooth out 1-element array of float)
+0:?     'c' ( smooth out 6-element array of float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 460
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:7    Sequence
+0:7      move second child to first child ( temp float)
+0:7        direct index ( temp float)
+0:7          'b' ( out 5-element array of float)
+0:7          Constant:
+0:7            0 (const int)
+0:7        direct index ( smooth temp float)
+0:7          'a' ( smooth in 2-element array of float)
+0:7          Constant:
+0:7            1 (const int)
+0:8      move second child to first child ( temp float)
+0:8        direct index ( temp float)
+0:8          'b' ( out 5-element array of float)
+0:8          Constant:
+0:8            1 (const int)
+0:8        direct index ( smooth temp float)
+0:8          'c' ( smooth in 3-element array of float)
+0:8          Constant:
+0:8            1 (const int)
+0:?   Linker Objects
+0:?     'a' ( smooth in 2-element array of float)
+0:?     'c' ( smooth in 3-element array of float)
+0:?     'b' ( out 5-element array of float)
+
diff --git a/Test/baseResults/implicitArraySize1.geom.out b/Test/baseResults/implicitArraySize1.geom.out
new file mode 100644
index 0000000..d9c2f8b
--- /dev/null
+++ b/Test/baseResults/implicitArraySize1.geom.out
@@ -0,0 +1,99 @@
+implicitArraySize1.geom
+Shader version: 460
+invocations = -1
+max_vertices = 204
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:12    Sequence
+0:12      Function Call: f( ( global void)
+0:13      move second child to first child ( temp float)
+0:13        direct index (layout( stream=0) temp float)
+0:13          'o' (layout( stream=0) out 3-element array of float)
+0:13          Constant:
+0:13            1 (const int)
+0:13        direct index ( temp float)
+0:13          direct index ( temp 3-element array of float)
+0:13            'g' ( in 3-element array of 3-element array of float)
+0:13            Constant:
+0:13              2 (const int)
+0:13          Constant:
+0:13            1 (const int)
+0:?   Linker Objects
+0:?     'g' ( in 3-element array of 3-element array of float)
+0:?     'o' (layout( stream=0) out 3-element array of float)
+
+implicitArraySize2.geom
+Shader version: 460
+invocations = -1
+max_vertices = -1
+input primitive = none
+output primitive = none
+0:? Sequence
+0:6  Function Definition: f( ( global void)
+0:6    Function Parameters: 
+0:7    Sequence
+0:7      move second child to first child ( temp float)
+0:7        direct index (layout( stream=0) temp float)
+0:7          'o' (layout( stream=0) out unsized 2-element array of float)
+0:7          Constant:
+0:7            1 (const int)
+0:7        direct index ( temp float)
+0:7          direct index ( temp 3-element array of float)
+0:7            'g' ( in unsized 2-element array of 3-element array of float)
+0:7            Constant:
+0:7              1 (const int)
+0:7          Constant:
+0:7            1 (const int)
+0:?   Linker Objects
+0:?     'g' ( in unsized 2-element array of 3-element array of float)
+0:?     'o' (layout( stream=0) out unsized 2-element array of float)
+
+
+Linked geometry stage:
+
+ERROR: Linking geometry stage: Not all array sizes match across all geometry shaders in the program
+
+Shader version: 460
+invocations = 1
+max_vertices = 204
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:12    Sequence
+0:12      Function Call: f( ( global void)
+0:13      move second child to first child ( temp float)
+0:13        direct index (layout( stream=0) temp float)
+0:13          'o' (layout( stream=0) out 3-element array of float)
+0:13          Constant:
+0:13            1 (const int)
+0:13        direct index ( temp float)
+0:13          direct index ( temp 3-element array of float)
+0:13            'g' ( in 3-element array of 3-element array of float)
+0:13            Constant:
+0:13              2 (const int)
+0:13          Constant:
+0:13            1 (const int)
+0:6  Function Definition: f( ( global void)
+0:6    Function Parameters: 
+0:7    Sequence
+0:7      move second child to first child ( temp float)
+0:7        direct index (layout( stream=0) temp float)
+0:7          'o' (layout( stream=0) out 2-element array of float)
+0:7          Constant:
+0:7            1 (const int)
+0:7        direct index ( temp float)
+0:7          direct index ( temp 3-element array of float)
+0:7            'g' ( in 2-element array of 3-element array of float)
+0:7            Constant:
+0:7              1 (const int)
+0:7          Constant:
+0:7            1 (const int)
+0:?   Linker Objects
+0:?     'g' ( in 3-element array of 3-element array of float)
+0:?     'o' (layout( stream=0) out 3-element array of float)
+
diff --git a/Test/baseResults/implicitArraySizeBuiltin.vert.out b/Test/baseResults/implicitArraySizeBuiltin.vert.out
new file mode 100644
index 0000000..77b41aa
--- /dev/null
+++ b/Test/baseResults/implicitArraySizeBuiltin.vert.out
@@ -0,0 +1,176 @@
+implicitArraySizeBuiltin.vert
+Shader version: 460
+0:? Sequence
+0:3  Function Definition: f1(f1; ( global void)
+0:3    Function Parameters: 
+0:3      'x' ( in float)
+0:5    Sequence
+0:5      move second child to first child ( temp float)
+0:5        direct index ( temp float ClipDistance)
+0:5          gl_ClipDistance: direct index for structure ( out unsized 7-element array of float ClipDistance)
+0:5            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 7-element array of float ClipDistance gl_ClipDistance,  out unsized 2-element array of float CullDistance gl_CullDistance})
+0:5            Constant:
+0:5              2 (const uint)
+0:5          Constant:
+0:5            6 (const int)
+0:5        'x' ( in float)
+0:6      move second child to first child ( temp float)
+0:6        direct index ( temp float CullDistance)
+0:6          gl_CullDistance: direct index for structure ( out unsized 2-element array of float CullDistance)
+0:6            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 7-element array of float ClipDistance gl_ClipDistance,  out unsized 2-element array of float CullDistance gl_CullDistance})
+0:6            Constant:
+0:6              3 (const uint)
+0:6          Constant:
+0:6            1 (const int)
+0:6        'x' ( in float)
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:10    Sequence
+0:10      Function Call: f1(f1; ( global void)
+0:10        Constant:
+0:10          0.100000
+0:?   Linker Objects
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out unsized 7-element array of float ClipDistance gl_ClipDistance,  out unsized 2-element array of float CullDistance gl_CullDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+implicitArraySizeBuiltin.geom
+Shader version: 460
+invocations = -1
+max_vertices = 204
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:6  Function Definition: f2(f1; ( global void)
+0:6    Function Parameters: 
+0:6      'x' ( in float)
+0:8    Sequence
+0:8      move second child to first child ( temp float)
+0:8        direct index (layout( stream=0) temp float ClipDistance)
+0:8          gl_ClipDistance: direct index for structure (layout( stream=0) out unsized 7-element array of float ClipDistance)
+0:8            '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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 2-element array of float CullDistance gl_CullDistance})
+0:8            Constant:
+0:8              2 (const uint)
+0:8          Constant:
+0:8            6 (const int)
+0:8        direct index ( temp float ClipDistance)
+0:8          gl_ClipDistance: direct index for structure ( in unsized 7-element array of float ClipDistance)
+0:8            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 7-element array of float ClipDistance gl_ClipDistance,  in unsized 2-element array of float CullDistance gl_CullDistance,  in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:8              'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 7-element array of float ClipDistance gl_ClipDistance,  in unsized 2-element array of float CullDistance gl_CullDistance,  in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:8              Constant:
+0:8                0 (const int)
+0:8            Constant:
+0:8              2 (const int)
+0:8          Constant:
+0:8            6 (const int)
+0:10  Function Definition: f3(f1; ( global void)
+0:10    Function Parameters: 
+0:10      'x' ( in float)
+0:12    Sequence
+0:12      move second child to first child ( temp float)
+0:12        direct index (layout( stream=0) temp float CullDistance)
+0:12          gl_CullDistance: direct index for structure (layout( stream=0) out unsized 2-element array of float CullDistance)
+0:12            '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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 2-element array of float CullDistance gl_CullDistance})
+0:12            Constant:
+0:12              3 (const uint)
+0:12          Constant:
+0:12            1 (const int)
+0:12        direct index ( temp float CullDistance)
+0:12          gl_CullDistance: direct index for structure ( in unsized 2-element array of float CullDistance)
+0:12            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 7-element array of float ClipDistance gl_ClipDistance,  in unsized 2-element array of float CullDistance gl_CullDistance,  in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:12              'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 7-element array of float ClipDistance gl_ClipDistance,  in unsized 2-element array of float CullDistance gl_CullDistance,  in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          Constant:
+0:12            1 (const int)
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:19    Sequence
+0:19      Function Call: f3(f1; ( global void)
+0:19        Constant:
+0:19          0.100000
+0:?   Linker Objects
+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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 2-element array of float CullDistance gl_CullDistance})
+0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in unsized 7-element array of float ClipDistance gl_ClipDistance,  in unsized 2-element array of float CullDistance gl_CullDistance,  in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV,  in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV})
+
+
+Linked vertex stage:
+
+
+Linked geometry stage:
+
+
+Shader version: 460
+0:? Sequence
+0:3  Function Definition: f1(f1; ( global void)
+0:3    Function Parameters: 
+0:3      'x' ( in float)
+0:5    Sequence
+0:5      move second child to first child ( temp float)
+0:5        direct index ( temp float ClipDistance)
+0:5          gl_ClipDistance: direct index for structure ( out 7-element array of float ClipDistance)
+0:5            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 7-element array of float ClipDistance gl_ClipDistance,  out 2-element array of float CullDistance gl_CullDistance})
+0:5            Constant:
+0:5              2 (const uint)
+0:5          Constant:
+0:5            6 (const int)
+0:5        'x' ( in float)
+0:6      move second child to first child ( temp float)
+0:6        direct index ( temp float CullDistance)
+0:6          gl_CullDistance: direct index for structure ( out 2-element array of float CullDistance)
+0:6            'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 7-element array of float ClipDistance gl_ClipDistance,  out 2-element array of float CullDistance gl_CullDistance})
+0:6            Constant:
+0:6              3 (const uint)
+0:6          Constant:
+0:6            1 (const int)
+0:6        'x' ( in float)
+0:9  Function Definition: main( ( global void)
+0:9    Function Parameters: 
+0:10    Sequence
+0:10      Function Call: f1(f1; ( global void)
+0:10        Constant:
+0:10          0.100000
+0:?   Linker Objects
+0:?     'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position,  gl_PointSize float PointSize gl_PointSize,  out 7-element array of float ClipDistance gl_ClipDistance,  out 2-element array of float CullDistance gl_CullDistance})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 460
+invocations = 1
+max_vertices = 204
+input primitive = triangles
+output primitive = line_strip
+0:? Sequence
+0:10  Function Definition: f3(f1; ( global void)
+0:10    Function Parameters: 
+0:10      'x' ( in float)
+0:12    Sequence
+0:12      move second child to first child ( temp float)
+0:12        direct index (layout( stream=0) temp float CullDistance)
+0:12          gl_CullDistance: direct index for structure (layout( stream=0) out 2-element array of float CullDistance)
+0:12            '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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 2-element array of float CullDistance gl_CullDistance})
+0:12            Constant:
+0:12              3 (const uint)
+0:12          Constant:
+0:12            1 (const int)
+0:12        direct index ( temp float CullDistance)
+0:12          gl_CullDistance: direct index for structure ( in 2-element array of float CullDistance)
+0:12            direct index ( temp block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in 7-element array of float ClipDistance gl_ClipDistance,  in 2-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})
+0:12              'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in 7-element array of float ClipDistance gl_ClipDistance,  in 2-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})
+0:12              Constant:
+0:12                0 (const int)
+0:12            Constant:
+0:12              3 (const int)
+0:12          Constant:
+0:12            1 (const int)
+0:15  Function Definition: main( ( global void)
+0:15    Function Parameters: 
+0:19    Sequence
+0:19      Function Call: f3(f1; ( global void)
+0:19        Constant:
+0:19          0.100000
+0:?   Linker Objects
+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 7-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 2-element array of float CullDistance gl_CullDistance})
+0:?     'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position,  in float PointSize gl_PointSize,  in 7-element array of float ClipDistance gl_ClipDistance,  in 2-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})
+
diff --git a/Test/baseResults/preprocessor.function_macro.vert.out b/Test/baseResults/preprocessor.function_macro.vert.out
index 1280ddf..010251e 100644
--- a/Test/baseResults/preprocessor.function_macro.vert.out
+++ b/Test/baseResults/preprocessor.function_macro.vert.out
@@ -13,9 +13,12 @@
 
 
 
+
+
 int main(){
   gl_Position = vec4(3 + 1, 3 + 4, 3 + 1);
   gl_Position = vec4(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12);
   gl_Position = vec4(4 + 3 + 3);
+  gl_Position = 4 + 3 + F . a;
 }
 
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
index 05936bb..a84d919 100644
--- a/Test/baseResults/rayQuery-allOps.comp.out
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -1,12 +1,14 @@
 rayQuery-allOps.comp
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 258
+// Id's are bound by 275
 
                               Capability Shader
                               Capability RayQueryKHR
                               Capability RayTraversalPrimitiveCullingKHR
+                              Capability RayQueryPositionFetchKHR
                               Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_KHR_ray_tracing_position_fetch"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint GLCompute 4  "main"
@@ -14,6 +16,7 @@
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_flags_primitive_culling"
                               SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_EXT_ray_tracing_position_fetch"
                               Name 4  "main"
                               Name 6  "doSomething("
                               Name 10  "Ray"
@@ -35,16 +38,17 @@
                               Name 83  "_mat3x4"
                               Name 143  "t"
                               Name 156  "committedStatus"
-                              Name 241  "o"
-                              Name 243  "d"
-                              Name 253  "Ray"
-                              MemberName 253(Ray) 0  "pos"
-                              MemberName 253(Ray) 1  "tmin"
-                              MemberName 253(Ray) 2  "dir"
-                              MemberName 253(Ray) 3  "tmax"
-                              Name 255  "Rays"
-                              MemberName 255(Rays) 0  "rays"
-                              Name 257  ""
+                              Name 184  "positions"
+                              Name 258  "o"
+                              Name 260  "d"
+                              Name 270  "Ray"
+                              MemberName 270(Ray) 0  "pos"
+                              MemberName 270(Ray) 1  "tmin"
+                              MemberName 270(Ray) 2  "dir"
+                              MemberName 270(Ray) 3  "tmax"
+                              Name 272  "Rays"
+                              MemberName 272(Rays) 0  "rays"
+                              Name 274  ""
                               MemberDecorate 15(Log) 0 Offset 0
                               MemberDecorate 15(Log) 1 Offset 4
                               Decorate 15(Log) BufferBlock
@@ -52,15 +56,15 @@
                               Decorate 17 Binding 0
                               Decorate 50(rtas) DescriptorSet 0
                               Decorate 50(rtas) Binding 1
-                              MemberDecorate 253(Ray) 0 Offset 0
-                              MemberDecorate 253(Ray) 1 Offset 12
-                              MemberDecorate 253(Ray) 2 Offset 16
-                              MemberDecorate 253(Ray) 3 Offset 28
-                              Decorate 254 ArrayStride 32
-                              MemberDecorate 255(Rays) 0 Offset 0
-                              Decorate 255(Rays) BufferBlock
-                              Decorate 257 DescriptorSet 0
-                              Decorate 257 Binding 2
+                              MemberDecorate 270(Ray) 0 Offset 0
+                              MemberDecorate 270(Ray) 1 Offset 12
+                              MemberDecorate 270(Ray) 2 Offset 16
+                              MemberDecorate 270(Ray) 3 Offset 28
+                              Decorate 271 ArrayStride 32
+                              MemberDecorate 272(Rays) 0 Offset 0
+                              Decorate 272(Rays) BufferBlock
+                              Decorate 274 DescriptorSet 0
+                              Decorate 274 Binding 2
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
@@ -105,13 +109,16 @@
               91:             TypeVector 8(float) 2
              144:    8(float) Constant 1056964608
              175:     14(int) Constant 1
-             198:     14(int) Constant 2
-             231:     14(int) Constant 256
-        253(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
-             254:             TypeRuntimeArray 253(Ray)
-       255(Rays):             TypeStruct 254
-             256:             TypePointer Uniform 255(Rays)
-             257:    256(ptr) Variable Uniform
+             181:     14(int) Constant 3
+             182:             TypeArray 9(fvec3) 181
+             183:             TypePointer Function 182
+             215:     14(int) Constant 2
+             248:     14(int) Constant 256
+        270(Ray):             TypeStruct 9(fvec3) 8(float) 9(fvec3) 8(float)
+             271:             TypeRuntimeArray 270(Ray)
+       272(Rays):             TypeStruct 271
+             273:             TypePointer Uniform 272(Rays)
+             274:    273(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
          43(ray):     25(ptr) Variable Function
@@ -120,8 +127,9 @@
      83(_mat3x4):     82(ptr) Variable Function
           143(t):     35(ptr) Variable Function
 156(committedStatus):     68(ptr) Variable Function
-          241(o):     29(ptr) Variable Function
-          243(d):     29(ptr) Variable Function
+  184(positions):    183(ptr) Variable Function
+          258(o):     29(ptr) Variable Function
+          260(d):     29(ptr) Variable Function
               44:     10(Ray) FunctionCall 12(makeRayDesc()
                               Store 43(ray) 44
               51:          48 Load 50(rtas)
@@ -303,110 +311,130 @@
              180:           2     FunctionCall 6(doSomething()
                                   Branch 179
              179:               Label
-                                Branch 162
-             161:               Label
-             182:     18(int)   RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23
-             183:    66(bool)   SGreaterThan 182 19
-                                SelectionMerge 185 None
-                                BranchConditional 183 184 185
-             184:                 Label
-             186:           2     FunctionCall 6(doSomething()
-                                  Branch 185
-             185:               Label
-             187:     18(int)   RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
-             188:    66(bool)   SGreaterThan 187 19
+             185:         182   RayQueryGetIntersectionTriangleVertexPositionsKHR 47(rayQuery) 23
+                                Store 184(positions) 185
+             186:     35(ptr)   AccessChain 184(positions) 19 20
+             187:    8(float)   Load 186
+             188:    66(bool)   FOrdLessThan 187 27
                                 SelectionMerge 190 None
                                 BranchConditional 188 189 190
              189:                 Label
-             191:           2     FunctionCall 6(doSomething()
+             191:     35(ptr)     AccessChain 184(positions) 31 175
+             192:    8(float)     Load 191
+             193:    66(bool)     FOrdGreaterThan 192 27
                                   Branch 190
              190:               Label
-             192:     18(int)   RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
-             193:    66(bool)   SGreaterThan 192 19
-                                SelectionMerge 195 None
-                                BranchConditional 193 194 195
-             194:                 Label
-             196:           2     FunctionCall 6(doSomething()
-                                  Branch 195
-             195:               Label
-             197:    9(fvec3)   RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
-             199:    8(float)   CompositeExtract 197 2
-             200:    66(bool)   FOrdGreaterThan 199 27
+             194:    66(bool)   Phi 188 179 193 189
+                                SelectionMerge 196 None
+                                BranchConditional 194 195 196
+             195:                 Label
+             197:           2     FunctionCall 6(doSomething()
+                                  Branch 196
+             196:               Label
+                                Branch 162
+             161:               Label
+             199:     18(int)   RayQueryGetIntersectionGeometryIndexKHR 47(rayQuery) 23
+             200:    66(bool)   SGreaterThan 199 19
                                 SelectionMerge 202 None
                                 BranchConditional 200 201 202
              201:                 Label
              203:           2     FunctionCall 6(doSomething()
                                   Branch 202
              202:               Label
-             204:    9(fvec3)   RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
-             205:    8(float)   CompositeExtract 204 0
-             206:    66(bool)   FOrdGreaterThan 205 27
-                                SelectionMerge 208 None
-                                BranchConditional 206 207 208
-             207:                 Label
-             209:           2     FunctionCall 6(doSomething()
-                                  Branch 208
-             208:               Label
-             210:     18(int)   RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
-             211:    66(bool)   SGreaterThan 210 19
-                                SelectionMerge 213 None
-                                BranchConditional 211 212 213
-             212:                 Label
-             214:           2     FunctionCall 6(doSomething()
-                                  Branch 213
-             213:               Label
-             215:    8(float)   RayQueryGetIntersectionTKHR 47(rayQuery) 23
-             216:    66(bool)   FOrdGreaterThan 215 27
-                                SelectionMerge 218 None
-                                BranchConditional 216 217 218
-             217:                 Label
-             219:           2     FunctionCall 6(doSomething()
-                                  Branch 218
-             218:               Label
+             204:     18(int)   RayQueryGetIntersectionInstanceIdKHR 47(rayQuery) 23
+             205:    66(bool)   SGreaterThan 204 19
+                                SelectionMerge 207 None
+                                BranchConditional 205 206 207
+             206:                 Label
+             208:           2     FunctionCall 6(doSomething()
+                                  Branch 207
+             207:               Label
+             209:     18(int)   RayQueryGetIntersectionInstanceCustomIndexKHR 47(rayQuery) 23
+             210:    66(bool)   SGreaterThan 209 19
+                                SelectionMerge 212 None
+                                BranchConditional 210 211 212
+             211:                 Label
+             213:           2     FunctionCall 6(doSomething()
+                                  Branch 212
+             212:               Label
+             214:    9(fvec3)   RayQueryGetIntersectionObjectRayDirectionKHR 47(rayQuery) 23
+             216:    8(float)   CompositeExtract 214 2
+             217:    66(bool)   FOrdGreaterThan 216 27
+                                SelectionMerge 219 None
+                                BranchConditional 217 218 219
+             218:                 Label
+             220:           2     FunctionCall 6(doSomething()
+                                  Branch 219
+             219:               Label
+             221:    9(fvec3)   RayQueryGetIntersectionObjectRayOriginKHR 47(rayQuery) 23
+             222:    8(float)   CompositeExtract 221 0
+             223:    66(bool)   FOrdGreaterThan 222 27
+                                SelectionMerge 225 None
+                                BranchConditional 223 224 225
+             224:                 Label
+             226:           2     FunctionCall 6(doSomething()
+                                  Branch 225
+             225:               Label
+             227:     18(int)   RayQueryGetIntersectionPrimitiveIndexKHR 47(rayQuery) 23
+             228:    66(bool)   SGreaterThan 227 19
+                                SelectionMerge 230 None
+                                BranchConditional 228 229 230
+             229:                 Label
+             231:           2     FunctionCall 6(doSomething()
+                                  Branch 230
+             230:               Label
+             232:    8(float)   RayQueryGetIntersectionTKHR 47(rayQuery) 23
+             233:    66(bool)   FOrdGreaterThan 232 27
+                                SelectionMerge 235 None
+                                BranchConditional 233 234 235
+             234:                 Label
+             236:           2     FunctionCall 6(doSomething()
+                                  Branch 235
+             235:               Label
                                 Branch 162
              162:             Label
-             222:     35(ptr) AccessChain 83(_mat3x4) 19 20
-             223:    8(float) Load 222
-             224:     35(ptr) AccessChain 78(_mat4x3) 19 20
-             225:    8(float) Load 224
-             226:    66(bool) FOrdEqual 223 225
-                              SelectionMerge 228 None
-                              BranchConditional 226 227 228
-             227:               Label
-             229:           2   FunctionCall 6(doSomething()
-                                Branch 228
-             228:             Label
-             230:     14(int) RayQueryGetRayFlagsKHR 47(rayQuery)
-             232:    66(bool) UGreaterThan 230 231
-                              SelectionMerge 234 None
-                              BranchConditional 232 233 234
-             233:               Label
-             235:           2   FunctionCall 6(doSomething()
-                                Branch 234
-             234:             Label
-             236:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
-             237:    66(bool) FOrdGreaterThan 236 27
-                              SelectionMerge 239 None
-                              BranchConditional 237 238 239
-             238:               Label
-             240:           2   FunctionCall 6(doSomething()
-                                Branch 239
-             239:             Label
-             242:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
-                              Store 241(o) 242
-             244:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
-                              Store 243(d) 244
-             245:     35(ptr) AccessChain 241(o) 20
-             246:    8(float) Load 245
-             247:     35(ptr) AccessChain 243(d) 198
-             248:    8(float) Load 247
-             249:    66(bool) FOrdEqual 246 248
+             239:     35(ptr) AccessChain 83(_mat3x4) 19 20
+             240:    8(float) Load 239
+             241:     35(ptr) AccessChain 78(_mat4x3) 19 20
+             242:    8(float) Load 241
+             243:    66(bool) FOrdEqual 240 242
+                              SelectionMerge 245 None
+                              BranchConditional 243 244 245
+             244:               Label
+             246:           2   FunctionCall 6(doSomething()
+                                Branch 245
+             245:             Label
+             247:     14(int) RayQueryGetRayFlagsKHR 47(rayQuery)
+             249:    66(bool) UGreaterThan 247 248
                               SelectionMerge 251 None
                               BranchConditional 249 250 251
              250:               Label
              252:           2   FunctionCall 6(doSomething()
                                 Branch 251
              251:             Label
+             253:    8(float) RayQueryGetRayTMinKHR 47(rayQuery)
+             254:    66(bool) FOrdGreaterThan 253 27
+                              SelectionMerge 256 None
+                              BranchConditional 254 255 256
+             255:               Label
+             257:           2   FunctionCall 6(doSomething()
+                                Branch 256
+             256:             Label
+             259:    9(fvec3) RayQueryGetWorldRayOriginKHR 47(rayQuery)
+                              Store 258(o) 259
+             261:    9(fvec3) RayQueryGetWorldRayDirectionKHR 47(rayQuery)
+                              Store 260(d) 261
+             262:     35(ptr) AccessChain 258(o) 20
+             263:    8(float) Load 262
+             264:     35(ptr) AccessChain 260(d) 215
+             265:    8(float) Load 264
+             266:    66(bool) FOrdEqual 263 265
+                              SelectionMerge 268 None
+                              BranchConditional 266 267 268
+             267:               Label
+             269:           2   FunctionCall 6(doSomething()
+                                Branch 268
+             268:             Label
                               Return
                               FunctionEnd
  6(doSomething():           2 Function None 3
diff --git a/Test/baseResults/size b/Test/baseResults/size
index a7b99b9..747b1e7 100644
--- a/Test/baseResults/size
+++ b/Test/baseResults/size
@@ -1 +1 @@
-399360 ../build/install/bin/glslangValidator.exe
+399360 ../build/install/bin/glslang.exe
diff --git a/Test/baseResults/spv.460.subgroupEXT.mesh.out b/Test/baseResults/spv.460.subgroupEXT.mesh.out
index be234ae..dd3de81 100644
--- a/Test/baseResults/spv.460.subgroupEXT.mesh.out
+++ b/Test/baseResults/spv.460.subgroupEXT.mesh.out
@@ -1,7 +1,7 @@
 spv.460.subgroupEXT.mesh
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 280
+// Id's are bound by 279
 
                               Capability ClipDistance
                               Capability CullDistance
@@ -19,7 +19,7 @@
                               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
+                              EntryPoint MeshEXT 4  "main" 35 41 57 109 147 161 162 167 168 171 172 173 174 175
                               ExecutionMode 4 LocalSize 32 1 1
                               ExecutionMode 4 OutputVertices 81
                               ExecutionMode 4 OutputPrimitivesNV 32
@@ -67,19 +67,19 @@
                               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"
+                              Name 147  "gl_PrimitiveTriangleIndicesEXT"
+                              Name 161  "gl_SubgroupSize"
+                              Name 162  "gl_SubgroupInvocationID"
+                              Name 167  "gl_NumSubgroups"
+                              Name 168  "gl_SubgroupID"
+                              Name 171  "gl_SubgroupEqMask"
+                              Name 172  "gl_SubgroupGeMask"
+                              Name 173  "gl_SubgroupGtMask"
+                              Name 174  "gl_SubgroupLeMask"
+                              Name 175  "gl_SubgroupLtMask"
+                              Name 181  "ballot"
+                              Name 218  "ballot"
+                              Name 253  "ballot"
                               Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
                               MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position
@@ -98,19 +98,19 @@
                               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
+                              Decorate 147(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
+                              Decorate 161(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 161(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 162(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 162(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 167(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 168(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 171(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 172(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 173(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 174(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 175(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              Decorate 278 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
@@ -161,33 +161,32 @@
              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
+             145:             TypeArray 33(ivec3) 47
+             146:             TypePointer Output 145
+147(gl_PrimitiveTriangleIndicesEXT):    146(ptr) Variable Output
+             148:   33(ivec3) ConstantComposite 78 78 78
+             149:             TypePointer Output 33(ivec3)
+             153:   33(ivec3) ConstantComposite 80 80 80
+161(gl_SubgroupSize):     37(ptr) Variable Input
+162(gl_SubgroupInvocationID):     37(ptr) Variable Input
+             163:     30(int) Constant 3400
+             164:     30(int) Constant 72
+             165:     30(int) Constant 2056
+167(gl_NumSubgroups):     37(ptr) Variable Input
+168(gl_SubgroupID):     37(ptr) Variable Input
+             169:             TypeVector 30(int) 4
+             170:             TypePointer Input 169(ivec4)
+171(gl_SubgroupEqMask):    170(ptr) Variable Input
+172(gl_SubgroupGeMask):    170(ptr) Variable Input
+173(gl_SubgroupGtMask):    170(ptr) Variable Input
+174(gl_SubgroupLeMask):    170(ptr) Variable Input
+175(gl_SubgroupLtMask):    170(ptr) Variable Input
+             180:             TypePointer Function 169(ivec4)
+             183:  169(ivec4) ConstantComposite 78 78 78 78
+             197:   105(bool) ConstantTrue
+             254:     30(int) Constant 85
+             255:  169(ivec4) ConstantComposite 254 36 36 36
+             278:   33(ivec3) ConstantComposite 47 78 78
          4(main):           2 Function None 3
                5:             Label
          32(iid):     31(ptr) Variable Function
@@ -290,159 +289,159 @@
                               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
+             150:    149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 60
+                              Store 150 148
+             151:     30(int) Load 46(primitiveCount)
+             152:     30(int) ISub 151 78
+             154:    149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 152
+                              Store 154 153
+             155:     30(int) Load 40(gid)
              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
+             157:     30(int) ISub 156 78
+             158:    149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 157
+             159:   33(ivec3) Load 158
+             160:    149(ptr) AccessChain 147(gl_PrimitiveTriangleIndicesEXT) 155
+                              Store 160 159
                               MemoryBarrier 78 79
                               ControlBarrier 80 80 79
                               Return
                               FunctionEnd
  6(basic_works():           2 Function None 3
                7:             Label
-                              ControlBarrier 52 52 164
+                              ControlBarrier 52 52 163
+                              MemoryBarrier 52 163
                               MemoryBarrier 52 164
                               MemoryBarrier 52 165
-                              MemoryBarrier 52 166
-             167:   105(bool) GroupNonUniformElect 52
+             166:   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
+     181(ballot):    180(ptr) Variable Function
+             176:    9(fvec4) Load 12(f4)
+             177:    9(fvec4) GroupNonUniformBroadcast 52 176 36
+             178:    9(fvec4) Load 12(f4)
+             179:    9(fvec4) GroupNonUniformBroadcastFirst 52 178
+             182:  169(ivec4) GroupNonUniformBallot 52 121
+                              Store 181(ballot) 182
+             184:   105(bool) GroupNonUniformInverseBallot 52 183
+             185:  169(ivec4) Load 181(ballot)
+             186:   105(bool) GroupNonUniformBallotBitExtract 52 185 36
+             187:  169(ivec4) Load 181(ballot)
+             188:     30(int) GroupNonUniformBallotBitCount 52 Reduce 187
+             189:  169(ivec4) Load 181(ballot)
+             190:     30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 189
+             191:  169(ivec4) Load 181(ballot)
+             192:     30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 191
+             193:  169(ivec4) Load 181(ballot)
+             194:     30(int) GroupNonUniformBallotFindLSB 52 193
+             195:  169(ivec4) Load 181(ballot)
+             196:     30(int) GroupNonUniformBallotFindMSB 52 195
                               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
+             198:   105(bool) GroupNonUniformAll 52 197
+             199:   105(bool) GroupNonUniformAny 52 121
+             200:    9(fvec4) Load 15(f4)
+             201:   105(bool) GroupNonUniformAllEqual 52 200
                               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
+             202:    9(fvec4) Load 18(f4)
+             203:    9(fvec4) GroupNonUniformShuffle 52 202 36
+             204:    9(fvec4) Load 18(f4)
+             205:    9(fvec4) GroupNonUniformShuffleXor 52 204 78
+             206:    9(fvec4) Load 18(f4)
+             207:    9(fvec4) GroupNonUniformShuffleUp 52 206 78
+             208:    9(fvec4) Load 18(f4)
+             209:    9(fvec4) GroupNonUniformShuffleDown 52 208 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
+     218(ballot):    180(ptr) Variable Function
+             210:    9(fvec4) Load 21(f4)
+             211:    9(fvec4) GroupNonUniformFAdd 52 Reduce 210
+             212:    9(fvec4) Load 21(f4)
+             213:    9(fvec4) GroupNonUniformFMul 52 Reduce 212
+             214:    9(fvec4) Load 21(f4)
+             215:    9(fvec4) GroupNonUniformFMin 52 Reduce 214
+             216:    9(fvec4) Load 21(f4)
+             217:    9(fvec4) GroupNonUniformFMax 52 Reduce 216
+             219:  169(ivec4) Load 218(ballot)
+             220:  169(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 219
+             221:  169(ivec4) Load 218(ballot)
+             222:  169(ivec4) GroupNonUniformBitwiseOr 52 Reduce 221
+             223:  169(ivec4) Load 218(ballot)
+             224:  169(ivec4) GroupNonUniformBitwiseXor 52 Reduce 223
+             225:    9(fvec4) Load 21(f4)
+             226:    9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 225
+             227:    9(fvec4) Load 21(f4)
+             228:    9(fvec4) GroupNonUniformFMul 52 InclusiveScan 227
+             229:    9(fvec4) Load 21(f4)
+             230:    9(fvec4) GroupNonUniformFMin 52 InclusiveScan 229
+             231:    9(fvec4) Load 21(f4)
+             232:    9(fvec4) GroupNonUniformFMax 52 InclusiveScan 231
+             233:  169(ivec4) Load 218(ballot)
+             234:  169(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 233
+             235:  169(ivec4) Load 218(ballot)
+             236:  169(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 235
+             237:  169(ivec4) Load 218(ballot)
+             238:  169(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 237
+             239:    9(fvec4) Load 21(f4)
+             240:    9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 239
+             241:    9(fvec4) Load 21(f4)
+             242:    9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 241
+             243:    9(fvec4) Load 21(f4)
+             244:    9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 243
+             245:    9(fvec4) Load 21(f4)
+             246:    9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 245
+             247:  169(ivec4) Load 218(ballot)
+             248:  169(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 247
+             249:  169(ivec4) Load 218(ballot)
+             250:  169(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 249
+             251:  169(ivec4) Load 218(ballot)
+             252:  169(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 251
                               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
+     253(ballot):    180(ptr) Variable Function
+                              Store 253(ballot) 255
+             256:    9(fvec4) Load 24(f4)
+             257:    9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 256 80
+             258:    9(fvec4) Load 24(f4)
+             259:    9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 258 80
+             260:    9(fvec4) Load 24(f4)
+             261:    9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 260 80
+             262:    9(fvec4) Load 24(f4)
+             263:    9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 262 80
+             264:  169(ivec4) Load 253(ballot)
+             265:  169(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 264 80
+             266:  169(ivec4) Load 253(ballot)
+             267:  169(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 266 80
+             268:  169(ivec4) Load 253(ballot)
+             269:  169(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 268 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
+             270:    9(fvec4) Load 27(f4)
+             271:    9(fvec4) GroupNonUniformQuadBroadcast 52 270 36
+             272:    9(fvec4) Load 27(f4)
+             273:    9(fvec4) GroupNonUniformQuadSwap 52 272 36
+             274:    9(fvec4) Load 27(f4)
+             275:    9(fvec4) GroupNonUniformQuadSwap 52 274 78
+             276:    9(fvec4) Load 27(f4)
+             277:    9(fvec4) GroupNonUniformQuadSwap 52 276 80
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ARMCoreBuiltIns.frag.out b/Test/baseResults/spv.ARMCoreBuiltIns.frag.out
new file mode 100644
index 0000000..ccfb409
--- /dev/null
+++ b/Test/baseResults/spv.ARMCoreBuiltIns.frag.out
@@ -0,0 +1,61 @@
+spv.ARMCoreBuiltIns.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 26
+
+                              Capability Shader
+                              Capability CoreBuiltinsARM
+                              Extension  "SPV_ARM_core_builtins"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 10 14 15 17 19 21
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_ARM_shader_core_builtins"
+                              Name 4  "main"
+                              Name 8  "temp"
+                              Name 10  "gl_WarpMaxIDARM"
+                              Name 14  "data"
+                              Name 15  "gl_CoreIDARM"
+                              Name 17  "gl_CoreCountARM"
+                              Name 19  "gl_CoreMaxIDARM"
+                              Name 21  "gl_WarpIDARM"
+                              Decorate 10(gl_WarpMaxIDARM) Flat
+                              Decorate 10(gl_WarpMaxIDARM) BuiltIn BuiltInWarpMaxIDARM
+                              Decorate 14(data) Location 0
+                              Decorate 15(gl_CoreIDARM) Flat
+                              Decorate 15(gl_CoreIDARM) BuiltIn CoreIDARM
+                              Decorate 17(gl_CoreCountARM) Flat
+                              Decorate 17(gl_CoreCountARM) BuiltIn CoreCountARM
+                              Decorate 19(gl_CoreMaxIDARM) Flat
+                              Decorate 19(gl_CoreMaxIDARM) BuiltIn CoreMaxIDARM
+                              Decorate 21(gl_WarpIDARM) Flat
+                              Decorate 21(gl_WarpIDARM) BuiltIn WarpIDARM
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_WarpMaxIDARM):      9(ptr) Variable Input
+              12:             TypeVector 6(int) 4
+              13:             TypePointer Output 12(ivec4)
+        14(data):     13(ptr) Variable Output
+15(gl_CoreIDARM):      9(ptr) Variable Input
+17(gl_CoreCountARM):      9(ptr) Variable Input
+19(gl_CoreMaxIDARM):      9(ptr) Variable Input
+21(gl_WarpIDARM):      9(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+         8(temp):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_WarpMaxIDARM)
+                              Store 8(temp) 11
+              16:      6(int) Load 15(gl_CoreIDARM)
+              18:      6(int) Load 17(gl_CoreCountARM)
+              20:      6(int) Load 19(gl_CoreMaxIDARM)
+              22:      6(int) Load 21(gl_WarpIDARM)
+              23:      6(int) Load 8(temp)
+              24:      6(int) IAdd 22 23
+              25:   12(ivec4) CompositeConstruct 16 18 20 24
+                              Store 14(data) 25
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ARMCoreBuiltIns.vert.out b/Test/baseResults/spv.ARMCoreBuiltIns.vert.out
new file mode 100644
index 0000000..5419be4
--- /dev/null
+++ b/Test/baseResults/spv.ARMCoreBuiltIns.vert.out
@@ -0,0 +1,65 @@
+spv.ARMCoreBuiltIns.vert
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 31
+
+                              Capability Shader
+                              Capability CoreBuiltinsARM
+                              Extension  "SPV_ARM_core_builtins"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 10 18 20 22 24
+                              Source GLSL 450
+                              SourceExtension  "GL_ARM_shader_core_builtins"
+                              Name 4  "main"
+                              Name 8  "temp"
+                              Name 10  "gl_WarpMaxIDARM"
+                              Name 13  "Output"
+                              MemberName 13(Output) 0  "result"
+                              Name 15  ""
+                              Name 18  "gl_CoreIDARM"
+                              Name 20  "gl_CoreCountARM"
+                              Name 22  "gl_CoreMaxIDARM"
+                              Name 24  "gl_WarpIDARM"
+                              Decorate 10(gl_WarpMaxIDARM) BuiltIn BuiltInWarpMaxIDARM
+                              MemberDecorate 13(Output) 0 Offset 0
+                              Decorate 13(Output) BufferBlock
+                              Decorate 15 DescriptorSet 0
+                              Decorate 15 Binding 0
+                              Decorate 18(gl_CoreIDARM) BuiltIn CoreIDARM
+                              Decorate 20(gl_CoreCountARM) BuiltIn CoreCountARM
+                              Decorate 22(gl_CoreMaxIDARM) BuiltIn CoreMaxIDARM
+                              Decorate 24(gl_WarpIDARM) BuiltIn WarpIDARM
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypePointer Input 6(int)
+10(gl_WarpMaxIDARM):      9(ptr) Variable Input
+              12:             TypeVector 6(int) 4
+      13(Output):             TypeStruct 12(ivec4)
+              14:             TypePointer Uniform 13(Output)
+              15:     14(ptr) Variable Uniform
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+18(gl_CoreIDARM):      9(ptr) Variable Input
+20(gl_CoreCountARM):      9(ptr) Variable Input
+22(gl_CoreMaxIDARM):      9(ptr) Variable Input
+24(gl_WarpIDARM):      9(ptr) Variable Input
+              29:             TypePointer Uniform 12(ivec4)
+         4(main):           2 Function None 3
+               5:             Label
+         8(temp):      7(ptr) Variable Function
+              11:      6(int) Load 10(gl_WarpMaxIDARM)
+                              Store 8(temp) 11
+              19:      6(int) Load 18(gl_CoreIDARM)
+              21:      6(int) Load 20(gl_CoreCountARM)
+              23:      6(int) Load 22(gl_CoreMaxIDARM)
+              25:      6(int) Load 24(gl_WarpIDARM)
+              26:      6(int) Load 8(temp)
+              27:      6(int) IAdd 25 26
+              28:   12(ivec4) CompositeConstruct 19 21 23 27
+              30:     29(ptr) AccessChain 15 17
+                              Store 30 28
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index 4960144..52eec11 100644
--- a/Test/baseResults/spv.bufferhandle8.frag.out
+++ b/Test/baseResults/spv.bufferhandle8.frag.out
@@ -1,7 +1,7 @@
 spv.bufferhandle8.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 27
+// Id's are bound by 39
 
                               Capability Shader
                               Capability PhysicalStorageBufferAddressesEXT
@@ -21,41 +21,46 @@
                               MemberName 10(T1) 0  "x"
                               Name 11  "T2"
                               MemberName 11(T2) 0  "x"
-                              Name 13  "T3"
-                              MemberName 13(T3) 0  "Bindings"
-                              Name 15  "t3"
-                              Name 23  "t2"
-                              MemberName 23(t2) 0  "f"
-                              MemberName 23(t2) 1  "g"
-                              Name 24  "blockType"
-                              MemberName 24(blockType) 0  "a"
-                              MemberName 24(blockType) 1  "b"
-                              MemberName 24(blockType) 2  "c"
-                              MemberName 24(blockType) 3  "d"
-                              MemberName 24(blockType) 4  "e"
-                              Name 26  "t"
-                              MemberDecorate 8(Blah) 0 Offset 0
-                              MemberDecorate 8(Blah) 1 Offset 8
+                              Name 13  "x"
+                              Name 14  "Blah"
+                              MemberName 14(Blah) 0  "t1"
+                              MemberName 14(Blah) 1  "t2"
+                              Name 16  "T3"
+                              MemberName 16(T3) 0  "Bindings"
+                              Name 18  "t3"
+                              Name 35  "t2"
+                              MemberName 35(t2) 0  "f"
+                              MemberName 35(t2) 1  "g"
+                              Name 36  "blockType"
+                              MemberName 36(blockType) 0  "a"
+                              MemberName 36(blockType) 1  "b"
+                              MemberName 36(blockType) 2  "c"
+                              MemberName 36(blockType) 3  "d"
+                              MemberName 36(blockType) 4  "e"
+                              Name 38  "t"
                               MemberDecorate 10(T1) 0 Offset 0
                               Decorate 10(T1) Block
                               MemberDecorate 11(T2) 0 Offset 0
                               Decorate 11(T2) Block
-                              Decorate 12 ArrayStride 16
-                              MemberDecorate 13(T3) 0 Offset 0
-                              Decorate 13(T3) Block
-                              Decorate 15(t3) DescriptorSet 0
-                              Decorate 15(t3) Binding 0
-                              MemberDecorate 23(t2) 0 Offset 0
-                              MemberDecorate 23(t2) 1 Offset 8
-                              Decorate 23(t2) Block
-                              MemberDecorate 24(blockType) 0 Offset 0
-                              MemberDecorate 24(blockType) 1 Offset 4
-                              MemberDecorate 24(blockType) 2 Offset 8
-                              MemberDecorate 24(blockType) 3 Offset 12
-                              MemberDecorate 24(blockType) 4 Offset 16
-                              Decorate 24(blockType) Block
-                              Decorate 26(t) DescriptorSet 0
-                              Decorate 26(t) Binding 0
+                              MemberDecorate 14(Blah) 0 Offset 0
+                              MemberDecorate 14(Blah) 1 Offset 8
+                              Decorate 15 ArrayStride 16
+                              MemberDecorate 16(T3) 0 Offset 0
+                              Decorate 16(T3) Block
+                              Decorate 18(t3) DescriptorSet 0
+                              Decorate 18(t3) Binding 0
+                              MemberDecorate 35(t2) 0 Offset 0
+                              MemberDecorate 35(t2) 1 Offset 8
+                              Decorate 35(t2) Block
+                              MemberDecorate 36(blockType) 0 Offset 0
+                              MemberDecorate 36(blockType) 1 Offset 4
+                              MemberDecorate 36(blockType) 2 Offset 8
+                              MemberDecorate 36(blockType) 3 Offset 12
+                              MemberDecorate 36(blockType) 4 Offset 16
+                              Decorate 36(blockType) Block
+                              Decorate 38(t) DescriptorSet 0
+                              Decorate 38(t) Binding 0
+                              Decorate 13(x) DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
@@ -66,24 +71,38 @@
                6:             TypePointer PhysicalStorageBufferEXT 10(T1)
           11(T2):             TypeStruct 9(int)
                7:             TypePointer PhysicalStorageBufferEXT 11(T2)
-              12:             TypeRuntimeArray 8(Blah)
-          13(T3):             TypeStruct 12
-              14:             TypePointer StorageBuffer 13(T3)
-          15(t3):     14(ptr) Variable StorageBuffer
-              16:      9(int) Constant 0
-              17:      9(int) Constant 1
-              18:             TypePointer StorageBuffer 8(Blah)
-                              TypeForwardPointer 22 PhysicalStorageBufferEXT
-          23(t2):             TypeStruct 22 22
-   24(blockType):             TypeStruct 9(int) 9(int) 9(int) 9(int) 9(int)
-              22:             TypePointer PhysicalStorageBufferEXT 24(blockType)
-              25:             TypePointer StorageBuffer 23(t2)
-           26(t):     25(ptr) Variable StorageBuffer
+              12:             TypePointer Function 8(Blah)
+        14(Blah):             TypeStruct 6(ptr) 7(ptr)
+              15:             TypeRuntimeArray 14(Blah)
+          16(T3):             TypeStruct 15
+              17:             TypePointer StorageBuffer 16(T3)
+          18(t3):     17(ptr) Variable StorageBuffer
+              19:      9(int) Constant 0
+              20:      9(int) Constant 2
+              21:             TypePointer StorageBuffer 14(Blah)
+              25:             TypePointer Function 6(ptr)
+              28:      9(int) Constant 1
+              29:             TypePointer Function 7(ptr)
+                              TypeForwardPointer 34 PhysicalStorageBufferEXT
+          35(t2):             TypeStruct 34 34
+   36(blockType):             TypeStruct 9(int) 9(int) 9(int) 9(int) 9(int)
+              34:             TypePointer PhysicalStorageBufferEXT 36(blockType)
+              37:             TypePointer StorageBuffer 35(t2)
+           38(t):     37(ptr) Variable StorageBuffer
          4(main):           2 Function None 3
                5:             Label
-              19:     18(ptr) AccessChain 15(t3) 16 17
-              20:     8(Blah) Load 19
-              21:     18(ptr) AccessChain 15(t3) 16 16
-                              Store 21 20
+           13(x):     12(ptr) Variable Function
+              22:     21(ptr) AccessChain 18(t3) 19 20
+              23:    14(Blah) Load 22
+              24:      6(ptr) CompositeExtract 23 0
+              26:     25(ptr) AccessChain 13(x) 19
+                              Store 26 24
+              27:      7(ptr) CompositeExtract 23 1
+              30:     29(ptr) AccessChain 13(x) 28
+                              Store 30 27
+              31:     21(ptr) AccessChain 18(t3) 19 28
+              32:    14(Blah) Load 31
+              33:     21(ptr) AccessChain 18(t3) 19 19
+                              Store 33 32
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index 67175de..1272675 100644
--- a/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -1,12 +1,12 @@
 spv.debugInfo.frag
 // Module Version 10300
 // Generated by (magic number): 8000b
-// Id's are bound by 124
+// Id's are bound by 187
 
                               Capability Shader
                2:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 5  "main" 24 52
+                              EntryPoint Fragment 5  "main" 30 104
                               ExecutionMode 5 OriginUpperLeft
                1:             String  "spv.debugInfo.frag"
                               Source GLSL 450 1  "#version 450
@@ -36,9 +36,40 @@
     return r;
 }
 
+float testBranch(float x, float y)
+{
+    float result = 0;
+    bool b = x > 0;
+
+    // branch with load
+    if (b) {
+        result += 1;
+    }
+    else {
+        result -= 1;
+    }
+
+    // branch with expression
+    if (x > y) {
+        result += x - y;
+    }
+
+    // selection with load
+    result += b ?
+        1 : -1;
+
+    // selection with expression
+    result += x < y ? 
+        y : 
+        float(b);
+
+    return result;
+}
+
 void main()
 {
     outv = foo(s);
+    outv += testBranch(inv.x, inv.y);
     outv += texture(s2d, vec2(0.5));
 
     switch (s.a) {
@@ -66,17 +97,24 @@
                               MemberName 8(S) 0  "a"
                               Name 14  "foo(struct-S-i11;"
                               Name 13  "s"
-                              Name 17  "r"
-                              Name 24  "inv"
-                              Name 52  "outv"
-                              Name 53  "S"
-                              MemberName 53(S) 0  "a"
-                              Name 54  "ubuf"
-                              MemberName 54(ubuf) 0  "s"
-                              Name 56  ""
-                              Name 57  "param"
-                              Name 67  "s2d"
-                              Name 97  "i"
+                              Name 20  "testBranch(f1;f1;"
+                              Name 18  "x"
+                              Name 19  "y"
+                              Name 23  "r"
+                              Name 30  "inv"
+                              Name 56  "result"
+                              Name 59  "b"
+                              Name 104  "outv"
+                              Name 105  "S"
+                              MemberName 105(S) 0  "a"
+                              Name 106  "ubuf"
+                              MemberName 106(ubuf) 0  "s"
+                              Name 108  ""
+                              Name 109  "param"
+                              Name 116  "param"
+                              Name 120  "param"
+                              Name 131  "s2d"
+                              Name 161  "i"
                               ModuleProcessed  "no-storage-format"
                               ModuleProcessed  "resource-set-binding 3"
                               ModuleProcessed  "auto-map-bindings"
@@ -88,15 +126,15 @@
                               ModuleProcessed  "suppress-warnings"
                               ModuleProcessed  "hlsl-offsets"
                               ModuleProcessed  "entry-point main"
-                              Decorate 24(inv) Location 0
-                              Decorate 52(outv) Location 0
-                              MemberDecorate 53(S) 0 Offset 0
-                              MemberDecorate 54(ubuf) 0 Offset 0
-                              Decorate 54(ubuf) Block
-                              Decorate 56 DescriptorSet 3
-                              Decorate 56 Binding 0
-                              Decorate 67(s2d) DescriptorSet 3
-                              Decorate 67(s2d) Binding 1
+                              Decorate 30(inv) Location 0
+                              Decorate 104(outv) Location 0
+                              MemberDecorate 105(S) 0 Offset 0
+                              MemberDecorate 106(ubuf) 0 Offset 0
+                              Decorate 106(ubuf) Block
+                              Decorate 108 DescriptorSet 3
+                              Decorate 108 Binding 0
+                              Decorate 131(s2d) DescriptorSet 3
+                              Decorate 131(s2d) Binding 1
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeInt 32 1
@@ -105,179 +143,280 @@
               10:             TypeFloat 32
               11:             TypeVector 10(float) 4
               12:             TypeFunction 11(fvec4) 9(ptr)
-              16:             TypePointer Function 11(fvec4)
-              18:      7(int) Constant 0
-              19:             TypePointer Function 7(int)
-              23:             TypePointer Input 11(fvec4)
-         24(inv):     23(ptr) Variable Input
-              28:   10(float) Constant 1065353216
-              31:             TypeInt 32 0
-              32:     31(int) Constant 0
-              33:             TypePointer Function 10(float)
-              36:   10(float) Constant 1077936128
-              37:             TypeBool
-              45:   10(float) Constant 1073741824
-              51:             TypePointer Output 11(fvec4)
-        52(outv):     51(ptr) Variable Output
-           53(S):             TypeStruct 7(int)
-        54(ubuf):             TypeStruct 53(S)
-              55:             TypePointer Uniform 54(ubuf)
-              56:     55(ptr) Variable Uniform
-              58:             TypePointer Uniform 53(S)
-              64:             TypeImage 10(float) 2D sampled format:Unknown
-              65:             TypeSampledImage 64
-              66:             TypePointer UniformConstant 65
-         67(s2d):     66(ptr) Variable UniformConstant
-              69:             TypeVector 10(float) 2
-              70:   10(float) Constant 1056964608
-              71:   69(fvec2) ConstantComposite 70 70
-              75:             TypePointer Uniform 7(int)
-             104:      7(int) Constant 10
-             109:      7(int) Constant 1
-             111:             TypePointer Output 10(float)
-             114:   10(float) Constant 1092616192
-                              Line 1 28 11
+              16:             TypePointer Function 10(float)
+              17:             TypeFunction 10(float) 16(ptr) 16(ptr)
+              22:             TypePointer Function 11(fvec4)
+              24:      7(int) Constant 0
+              25:             TypePointer Function 7(int)
+              29:             TypePointer Input 11(fvec4)
+         30(inv):     29(ptr) Variable Input
+              34:   10(float) Constant 1065353216
+              37:             TypeInt 32 0
+              38:     37(int) Constant 0
+              41:   10(float) Constant 1077936128
+              42:             TypeBool
+              50:   10(float) Constant 1073741824
+              57:   10(float) Constant 0
+              58:             TypePointer Function 42(bool)
+              81:      7(int) Constant 1
+              82:      7(int) Constant 4294967295
+             103:             TypePointer Output 11(fvec4)
+       104(outv):    103(ptr) Variable Output
+          105(S):             TypeStruct 7(int)
+       106(ubuf):             TypeStruct 105(S)
+             107:             TypePointer Uniform 106(ubuf)
+             108:    107(ptr) Variable Uniform
+             110:             TypePointer Uniform 105(S)
+             117:             TypePointer Input 10(float)
+             121:     37(int) Constant 1
+             128:             TypeImage 10(float) 2D sampled format:Unknown
+             129:             TypeSampledImage 128
+             130:             TypePointer UniformConstant 129
+        131(s2d):    130(ptr) Variable UniformConstant
+             133:             TypeVector 10(float) 2
+             134:   10(float) Constant 1056964608
+             135:  133(fvec2) ConstantComposite 134 134
+             139:             TypePointer Uniform 7(int)
+             168:      7(int) Constant 10
+             174:             TypePointer Output 10(float)
+             177:   10(float) Constant 1092616192
+                              Line 1 58 11
          5(main):           3 Function None 4
                6:             Label
-       57(param):      9(ptr) Variable Function
-           97(i):     19(ptr) Variable Function
-             116:     16(ptr) Variable Function
-                              Line 1 30 0
-              59:     58(ptr) AccessChain 56 18
-              60:       53(S) Load 59
-              61:      7(int) CompositeExtract 60 0
-              62:     19(ptr) AccessChain 57(param) 18
-                              Store 62 61
-              63:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 57(param)
-                              Store 52(outv) 63
-                              Line 1 31 0
-              68:          65 Load 67(s2d)
-              72:   11(fvec4) ImageSampleImplicitLod 68 71
-              73:   11(fvec4) Load 52(outv)
-              74:   11(fvec4) FAdd 73 72
-                              Store 52(outv) 74
-                              Line 1 33 0
-              76:     75(ptr) AccessChain 56 18 18
-              77:      7(int) Load 76
-                              SelectionMerge 81 None
-                              Switch 77 80 
-                                     case 10: 78
-                                     case 20: 79
-              80:               Label
-                                Line 1 42 0
-              92:   11(fvec4)   Load 52(outv)
-              93:   11(fvec4)   CompositeConstruct 28 28 28 28
-              94:   11(fvec4)   FSub 92 93
-                                Store 52(outv) 94
-                                Line 1 43 0
-                                Branch 81
-              78:               Label
-                                Line 1 35 0
-              82:   11(fvec4)   Load 52(outv)
-              83:   11(fvec4)   CompositeConstruct 28 28 28 28
-              84:   11(fvec4)   FAdd 82 83
-                                Store 52(outv) 84
-                                Line 1 36 0
-                                Branch 81
-              79:               Label
-                                Line 1 38 0
-              86:   11(fvec4)   Load 52(outv)
-              87:   11(fvec4)   VectorTimesScalar 86 45
-                                Store 52(outv) 87
-                                Line 1 39 0
-              88:   11(fvec4)   Load 52(outv)
-              89:   11(fvec4)   CompositeConstruct 28 28 28 28
-              90:   11(fvec4)   FAdd 88 89
-                                Store 52(outv) 90
-                                Line 1 40 0
-                                Branch 81
-              81:             Label
-                              Line 1 46 0
-                              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
-              99:               Label
-                                Line 1 47 0
-             106:   11(fvec4)   Load 52(outv)
-             107:   11(fvec4)   VectorTimesScalar 106 36
-                                Store 52(outv) 107
-                                Branch 101
-             101:               Label
-                                Line 1 46 0
-             108:      7(int)   Load 97(i)
-             110:      7(int)   IAdd 108 109
-                                Store 97(i) 110
-                                Branch 98
-             100:             Label
-                              Line 1 49 0
-             112:    111(ptr) AccessChain 52(outv) 32
-             113:   10(float) Load 112
-             115:    37(bool) FOrdLessThan 113 114
-                              SelectionMerge 118 None
-                              BranchConditional 115 117 121
-             117:               Label
-                                Line 1 50 0
-             119:   11(fvec4)   Load 52(outv)
-             120:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 119
-                                Store 52(outv) 120
-                                Store 116 120
-                                Branch 118
-             121:               Label
-                                Line 1 51 0
-             122:   11(fvec4)   Load 52(outv)
-             123:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 122
-                                Store 52(outv) 123
-                                Store 116 123
-                                Branch 118
-             118:             Label
+      109(param):      9(ptr) Variable Function
+      116(param):     16(ptr) Variable Function
+      120(param):     16(ptr) Variable Function
+          161(i):     25(ptr) Variable Function
+             179:     22(ptr) Variable Function
+                              Line 1 60 0
+             111:    110(ptr) AccessChain 108 24
+             112:      105(S) Load 111
+             113:      7(int) CompositeExtract 112 0
+             114:     25(ptr) AccessChain 109(param) 24
+                              Store 114 113
+             115:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 109(param)
+                              Store 104(outv) 115
+                              Line 1 61 0
+             118:    117(ptr) AccessChain 30(inv) 38
+             119:   10(float) Load 118
+                              Store 116(param) 119
+             122:    117(ptr) AccessChain 30(inv) 121
+             123:   10(float) Load 122
+                              Store 120(param) 123
+             124:   10(float) FunctionCall 20(testBranch(f1;f1;) 116(param) 120(param)
+             125:   11(fvec4) Load 104(outv)
+             126:   11(fvec4) CompositeConstruct 124 124 124 124
+             127:   11(fvec4) FAdd 125 126
+                              Store 104(outv) 127
+                              Line 1 62 0
+             132:         129 Load 131(s2d)
+             136:   11(fvec4) ImageSampleImplicitLod 132 135
+             137:   11(fvec4) Load 104(outv)
+             138:   11(fvec4) FAdd 137 136
+                              Store 104(outv) 138
+                              Line 1 64 0
+             140:    139(ptr) AccessChain 108 24 24
+             141:      7(int) Load 140
+                              SelectionMerge 145 None
+                              Switch 141 144 
+                                     case 10: 142
+                                     case 20: 143
+             144:               Label
+                                Line 1 73 0
+             156:   11(fvec4)   Load 104(outv)
+             157:   11(fvec4)   CompositeConstruct 34 34 34 34
+             158:   11(fvec4)   FSub 156 157
+                                Store 104(outv) 158
+                                Line 1 74 0
+                                Branch 145
+             142:               Label
+                                Line 1 66 0
+             146:   11(fvec4)   Load 104(outv)
+             147:   11(fvec4)   CompositeConstruct 34 34 34 34
+             148:   11(fvec4)   FAdd 146 147
+                                Store 104(outv) 148
+                                Line 1 67 0
+                                Branch 145
+             143:               Label
+                                Line 1 69 0
+             150:   11(fvec4)   Load 104(outv)
+             151:   11(fvec4)   VectorTimesScalar 150 50
+                                Store 104(outv) 151
+                                Line 1 70 0
+             152:   11(fvec4)   Load 104(outv)
+             153:   11(fvec4)   CompositeConstruct 34 34 34 34
+             154:   11(fvec4)   FAdd 152 153
+                                Store 104(outv) 154
+                                Line 1 71 0
+                                Branch 145
+             145:             Label
+                              Line 1 77 0
+                              Store 161(i) 24
+                              Branch 162
+             162:             Label
+                              Line 1 77 0
+                              LoopMerge 164 165 None
+                              Branch 166
+             166:             Label
+                              Line 1 77 0
+             167:      7(int) Load 161(i)
+             169:    42(bool) SLessThan 167 168
+                              BranchConditional 169 163 164
+             163:               Label
+                                Line 1 78 0
+             170:   11(fvec4)   Load 104(outv)
+             171:   11(fvec4)   VectorTimesScalar 170 41
+                                Store 104(outv) 171
+                                Branch 165
+             165:               Label
+                                Line 1 77 0
+             172:      7(int)   Load 161(i)
+             173:      7(int)   IAdd 172 81
+                                Store 161(i) 173
+                                Branch 162
+             164:             Label
+                              Line 1 80 0
+             175:    174(ptr) AccessChain 104(outv) 38
+             176:   10(float) Load 175
+             178:    42(bool) FOrdLessThan 176 177
+                              SelectionMerge 181 None
+                              BranchConditional 178 180 184
+             180:               Label
+                                Line 1 81 0
+             182:   11(fvec4)   Load 104(outv)
+             183:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 182
+                                Store 104(outv) 183
+                                Store 179 183
+                                Branch 181
+             184:               Label
+                                Line 1 82 0
+             185:   11(fvec4)   Load 104(outv)
+             186:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 185
+                                Store 104(outv) 186
+                                Store 179 186
+                                Branch 181
+             181:             Label
                               Return
                               FunctionEnd
                               Line 1 16 13
 14(foo(struct-S-i11;):   11(fvec4) Function None 12
            13(s):      9(ptr) FunctionParameter
               15:             Label
-           17(r):     16(ptr) Variable Function
+           23(r):     22(ptr) Variable Function
                               Line 1 18 0
-              20:     19(ptr) AccessChain 13(s) 18
-              21:      7(int) Load 20
-              22:   10(float) ConvertSToF 21
-              25:   11(fvec4) Load 24(inv)
-              26:   11(fvec4) VectorTimesScalar 25 22
-                              Store 17(r) 26
+              26:     25(ptr) AccessChain 13(s) 24
+              27:      7(int) Load 26
+              28:   10(float) ConvertSToF 27
+              31:   11(fvec4) Load 30(inv)
+              32:   11(fvec4) VectorTimesScalar 31 28
+                              Store 23(r) 32
                               Line 1 19 0
-              27:   11(fvec4) Load 17(r)
-              29:   11(fvec4) CompositeConstruct 28 28 28 28
-              30:   11(fvec4) FAdd 27 29
-                              Store 17(r) 30
+              33:   11(fvec4) Load 23(r)
+              35:   11(fvec4) CompositeConstruct 34 34 34 34
+              36:   11(fvec4) FAdd 33 35
+                              Store 23(r) 36
                               Line 1 20 0
-              34:     33(ptr) AccessChain 17(r) 32
-              35:   10(float) Load 34
-              38:    37(bool) FOrdGreaterThan 35 36
-                              SelectionMerge 40 None
-                              BranchConditional 38 39 44
-              39:               Label
-                                Line 1 21 0
-              41:   11(fvec4)   Load 17(r)
-              42:   11(fvec4)   CompositeConstruct 28 28 28 28
-              43:   11(fvec4)   FSub 41 42
-                                Store 17(r) 43
-                                Branch 40
+              39:     16(ptr) AccessChain 23(r) 38
+              40:   10(float) Load 39
+              43:    42(bool) FOrdGreaterThan 40 41
+                              SelectionMerge 45 None
+                              BranchConditional 43 44 49
               44:               Label
+                                Line 1 21 0
+              46:   11(fvec4)   Load 23(r)
+              47:   11(fvec4)   CompositeConstruct 34 34 34 34
+              48:   11(fvec4)   FSub 46 47
+                                Store 23(r) 48
+                                Branch 45
+              49:               Label
                                 Line 1 23 0
-              46:   11(fvec4)   Load 17(r)
-              47:   11(fvec4)   VectorTimesScalar 46 45
-                                Store 17(r) 47
-                                Branch 40
-              40:             Label
+              51:   11(fvec4)   Load 23(r)
+              52:   11(fvec4)   VectorTimesScalar 51 50
+                                Store 23(r) 52
+                                Branch 45
+              45:             Label
                               Line 1 25 0
-              48:   11(fvec4) Load 17(r)
-                              ReturnValue 48
+              53:   11(fvec4) Load 23(r)
+                              ReturnValue 53
+                              FunctionEnd
+                              Line 1 28 34
+20(testBranch(f1;f1;):   10(float) Function None 17
+           18(x):     16(ptr) FunctionParameter
+           19(y):     16(ptr) FunctionParameter
+              21:             Label
+      56(result):     16(ptr) Variable Function
+           59(b):     58(ptr) Variable Function
+              90:     16(ptr) Variable Function
+                              Line 1 30 0
+                              Store 56(result) 57
+                              Line 1 31 0
+              60:   10(float) Load 18(x)
+              61:    42(bool) FOrdGreaterThan 60 57
+                              Store 59(b) 61
+                              Line 1 34 0
+              62:    42(bool) Load 59(b)
+                              SelectionMerge 64 None
+                              BranchConditional 62 63 67
+              63:               Label
+                                Line 1 35 0
+              65:   10(float)   Load 56(result)
+              66:   10(float)   FAdd 65 34
+                                Store 56(result) 66
+                                Branch 64
+              67:               Label
+                                Line 1 38 0
+              68:   10(float)   Load 56(result)
+              69:   10(float)   FSub 68 34
+                                Store 56(result) 69
+                                Branch 64
+              64:             Label
+                              Line 1 42 0
+              70:   10(float) Load 18(x)
+              71:   10(float) Load 19(y)
+              72:    42(bool) FOrdGreaterThan 70 71
+                              SelectionMerge 74 None
+                              BranchConditional 72 73 74
+              73:               Label
+                                Line 1 43 0
+              75:   10(float)   Load 18(x)
+              76:   10(float)   Load 19(y)
+              77:   10(float)   FSub 75 76
+              78:   10(float)   Load 56(result)
+              79:   10(float)   FAdd 78 77
+                                Store 56(result) 79
+                                Branch 74
+              74:             Label
+                              Line 1 47 0
+              80:    42(bool) Load 59(b)
+              83:      7(int) Select 80 81 82
+              84:   10(float) ConvertSToF 83
+              85:   10(float) Load 56(result)
+              86:   10(float) FAdd 85 84
+                              Store 56(result) 86
+                              Line 1 51 0
+              87:   10(float) Load 18(x)
+              88:   10(float) Load 19(y)
+              89:    42(bool) FOrdLessThan 87 88
+                              SelectionMerge 92 None
+                              BranchConditional 89 91 94
+              91:               Label
+                                Line 1 52 0
+              93:   10(float)   Load 19(y)
+                                Store 90 93
+                                Branch 92
+              94:               Label
+                                Line 1 53 0
+              95:    42(bool)   Load 59(b)
+              96:   10(float)   Select 95 34 57
+                                Store 90 96
+                                Branch 92
+              92:             Label
+              97:   10(float) Load 90
+                              Line 1 51 0
+              98:   10(float) Load 56(result)
+              99:   10(float) FAdd 98 97
+                              Store 56(result) 99
+                              Line 1 55 0
+             100:   10(float) Load 56(result)
+                              ReturnValue 100
                               FunctionEnd
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index b9eb496..8bacd74 100644
--- a/Test/baseResults/spv.debugInfo.frag.out
+++ b/Test/baseResults/spv.debugInfo.frag.out
@@ -1,12 +1,12 @@
 spv.debugInfo.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 124
+// Id's are bound by 187
 
                               Capability Shader
                2:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 5  "main" 24 52
+                              EntryPoint Fragment 5  "main" 30 104
                               ExecutionMode 5 OriginLowerLeft
                1:             String  "spv.debugInfo.frag"
                               Source GLSL 450 1  "// OpModuleProcessed no-storage-format
@@ -47,9 +47,40 @@
     return r;
 }
 
+float testBranch(float x, float y)
+{
+    float result = 0;
+    bool b = x > 0;
+
+    // branch with load
+    if (b) {
+        result += 1;
+    }
+    else {
+        result -= 1;
+    }
+
+    // branch with expression
+    if (x > y) {
+        result += x - y;
+    }
+
+    // selection with load
+    result += b ?
+        1 : -1;
+
+    // selection with expression
+    result += x < y ? 
+        y : 
+        float(b);
+
+    return result;
+}
+
 void main()
 {
     outv = foo(s);
+    outv += testBranch(inv.x, inv.y);
     outv += texture(s2d, vec2(0.5));
 
     switch (s.a) {
@@ -77,27 +108,34 @@
                               MemberName 8(S) 0  "a"
                               Name 14  "foo(struct-S-i11;"
                               Name 13  "s"
-                              Name 17  "r"
-                              Name 24  "inv"
-                              Name 52  "outv"
-                              Name 53  "S"
-                              MemberName 53(S) 0  "a"
-                              Name 54  "ubuf"
-                              MemberName 54(ubuf) 0  "s"
-                              Name 56  ""
-                              Name 57  "param"
-                              Name 67  "s2d"
-                              Name 97  "i"
-                              Decorate 24(inv) Location 0
-                              Decorate 52(outv) Location 0
-                              MemberDecorate 53(S) 0 Offset 0
-                              MemberDecorate 54(ubuf) 0 Offset 0
-                              Decorate 54(ubuf) Block
-                              Decorate 56 DescriptorSet 3
-                              Decorate 56 Binding 0
-                              Decorate 67(s2d) Location 0
-                              Decorate 67(s2d) DescriptorSet 3
-                              Decorate 67(s2d) Binding 1
+                              Name 20  "testBranch(f1;f1;"
+                              Name 18  "x"
+                              Name 19  "y"
+                              Name 23  "r"
+                              Name 30  "inv"
+                              Name 56  "result"
+                              Name 59  "b"
+                              Name 104  "outv"
+                              Name 105  "S"
+                              MemberName 105(S) 0  "a"
+                              Name 106  "ubuf"
+                              MemberName 106(ubuf) 0  "s"
+                              Name 108  ""
+                              Name 109  "param"
+                              Name 116  "param"
+                              Name 120  "param"
+                              Name 131  "s2d"
+                              Name 161  "i"
+                              Decorate 30(inv) Location 0
+                              Decorate 104(outv) Location 0
+                              MemberDecorate 105(S) 0 Offset 0
+                              MemberDecorate 106(ubuf) 0 Offset 0
+                              Decorate 106(ubuf) Block
+                              Decorate 108 DescriptorSet 3
+                              Decorate 108 Binding 0
+                              Decorate 131(s2d) Location 0
+                              Decorate 131(s2d) DescriptorSet 3
+                              Decorate 131(s2d) Binding 1
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeInt 32 1
@@ -106,179 +144,280 @@
               10:             TypeFloat 32
               11:             TypeVector 10(float) 4
               12:             TypeFunction 11(fvec4) 9(ptr)
-              16:             TypePointer Function 11(fvec4)
-              18:      7(int) Constant 0
-              19:             TypePointer Function 7(int)
-              23:             TypePointer Input 11(fvec4)
-         24(inv):     23(ptr) Variable Input
-              28:   10(float) Constant 1065353216
-              31:             TypeInt 32 0
-              32:     31(int) Constant 0
-              33:             TypePointer Function 10(float)
-              36:   10(float) Constant 1077936128
-              37:             TypeBool
-              45:   10(float) Constant 1073741824
-              51:             TypePointer Output 11(fvec4)
-        52(outv):     51(ptr) Variable Output
-           53(S):             TypeStruct 7(int)
-        54(ubuf):             TypeStruct 53(S)
-              55:             TypePointer Uniform 54(ubuf)
-              56:     55(ptr) Variable Uniform
-              58:             TypePointer Uniform 53(S)
-              64:             TypeImage 10(float) 2D sampled format:Unknown
-              65:             TypeSampledImage 64
-              66:             TypePointer UniformConstant 65
-         67(s2d):     66(ptr) Variable UniformConstant
-              69:             TypeVector 10(float) 2
-              70:   10(float) Constant 1056964608
-              71:   69(fvec2) ConstantComposite 70 70
-              75:             TypePointer Uniform 7(int)
-             104:      7(int) Constant 10
-             109:      7(int) Constant 1
-             111:             TypePointer Output 10(float)
-             114:   10(float) Constant 1092616192
-                              Line 1 28 11
+              16:             TypePointer Function 10(float)
+              17:             TypeFunction 10(float) 16(ptr) 16(ptr)
+              22:             TypePointer Function 11(fvec4)
+              24:      7(int) Constant 0
+              25:             TypePointer Function 7(int)
+              29:             TypePointer Input 11(fvec4)
+         30(inv):     29(ptr) Variable Input
+              34:   10(float) Constant 1065353216
+              37:             TypeInt 32 0
+              38:     37(int) Constant 0
+              41:   10(float) Constant 1077936128
+              42:             TypeBool
+              50:   10(float) Constant 1073741824
+              57:   10(float) Constant 0
+              58:             TypePointer Function 42(bool)
+              81:      7(int) Constant 1
+              82:      7(int) Constant 4294967295
+             103:             TypePointer Output 11(fvec4)
+       104(outv):    103(ptr) Variable Output
+          105(S):             TypeStruct 7(int)
+       106(ubuf):             TypeStruct 105(S)
+             107:             TypePointer Uniform 106(ubuf)
+             108:    107(ptr) Variable Uniform
+             110:             TypePointer Uniform 105(S)
+             117:             TypePointer Input 10(float)
+             121:     37(int) Constant 1
+             128:             TypeImage 10(float) 2D sampled format:Unknown
+             129:             TypeSampledImage 128
+             130:             TypePointer UniformConstant 129
+        131(s2d):    130(ptr) Variable UniformConstant
+             133:             TypeVector 10(float) 2
+             134:   10(float) Constant 1056964608
+             135:  133(fvec2) ConstantComposite 134 134
+             139:             TypePointer Uniform 7(int)
+             168:      7(int) Constant 10
+             174:             TypePointer Output 10(float)
+             177:   10(float) Constant 1092616192
+                              Line 1 58 11
          5(main):           3 Function None 4
                6:             Label
-       57(param):      9(ptr) Variable Function
-           97(i):     19(ptr) Variable Function
-             116:     16(ptr) Variable Function
-                              Line 1 30 0
-              59:     58(ptr) AccessChain 56 18
-              60:       53(S) Load 59
-              61:      7(int) CompositeExtract 60 0
-              62:     19(ptr) AccessChain 57(param) 18
-                              Store 62 61
-              63:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 57(param)
-                              Store 52(outv) 63
-                              Line 1 31 0
-              68:          65 Load 67(s2d)
-              72:   11(fvec4) ImageSampleImplicitLod 68 71
-              73:   11(fvec4) Load 52(outv)
-              74:   11(fvec4) FAdd 73 72
-                              Store 52(outv) 74
-                              Line 1 33 0
-              76:     75(ptr) AccessChain 56 18 18
-              77:      7(int) Load 76
-                              SelectionMerge 81 None
-                              Switch 77 80 
-                                     case 10: 78
-                                     case 20: 79
-              80:               Label
-                                Line 1 42 0
-              92:   11(fvec4)   Load 52(outv)
-              93:   11(fvec4)   CompositeConstruct 28 28 28 28
-              94:   11(fvec4)   FSub 92 93
-                                Store 52(outv) 94
-                                Line 1 43 0
-                                Branch 81
-              78:               Label
-                                Line 1 35 0
-              82:   11(fvec4)   Load 52(outv)
-              83:   11(fvec4)   CompositeConstruct 28 28 28 28
-              84:   11(fvec4)   FAdd 82 83
-                                Store 52(outv) 84
-                                Line 1 36 0
-                                Branch 81
-              79:               Label
-                                Line 1 38 0
-              86:   11(fvec4)   Load 52(outv)
-              87:   11(fvec4)   VectorTimesScalar 86 45
-                                Store 52(outv) 87
-                                Line 1 39 0
-              88:   11(fvec4)   Load 52(outv)
-              89:   11(fvec4)   CompositeConstruct 28 28 28 28
-              90:   11(fvec4)   FAdd 88 89
-                                Store 52(outv) 90
-                                Line 1 40 0
-                                Branch 81
-              81:             Label
-                              Line 1 46 0
-                              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
-              99:               Label
-                                Line 1 47 0
-             106:   11(fvec4)   Load 52(outv)
-             107:   11(fvec4)   VectorTimesScalar 106 36
-                                Store 52(outv) 107
-                                Branch 101
-             101:               Label
-                                Line 1 46 0
-             108:      7(int)   Load 97(i)
-             110:      7(int)   IAdd 108 109
-                                Store 97(i) 110
-                                Branch 98
-             100:             Label
-                              Line 1 49 0
-             112:    111(ptr) AccessChain 52(outv) 32
-             113:   10(float) Load 112
-             115:    37(bool) FOrdLessThan 113 114
-                              SelectionMerge 118 None
-                              BranchConditional 115 117 121
-             117:               Label
-                                Line 1 50 0
-             119:   11(fvec4)   Load 52(outv)
-             120:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 119
-                                Store 52(outv) 120
-                                Store 116 120
-                                Branch 118
-             121:               Label
-                                Line 1 51 0
-             122:   11(fvec4)   Load 52(outv)
-             123:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 122
-                                Store 52(outv) 123
-                                Store 116 123
-                                Branch 118
-             118:             Label
+      109(param):      9(ptr) Variable Function
+      116(param):     16(ptr) Variable Function
+      120(param):     16(ptr) Variable Function
+          161(i):     25(ptr) Variable Function
+             179:     22(ptr) Variable Function
+                              Line 1 60 0
+             111:    110(ptr) AccessChain 108 24
+             112:      105(S) Load 111
+             113:      7(int) CompositeExtract 112 0
+             114:     25(ptr) AccessChain 109(param) 24
+                              Store 114 113
+             115:   11(fvec4) FunctionCall 14(foo(struct-S-i11;) 109(param)
+                              Store 104(outv) 115
+                              Line 1 61 0
+             118:    117(ptr) AccessChain 30(inv) 38
+             119:   10(float) Load 118
+                              Store 116(param) 119
+             122:    117(ptr) AccessChain 30(inv) 121
+             123:   10(float) Load 122
+                              Store 120(param) 123
+             124:   10(float) FunctionCall 20(testBranch(f1;f1;) 116(param) 120(param)
+             125:   11(fvec4) Load 104(outv)
+             126:   11(fvec4) CompositeConstruct 124 124 124 124
+             127:   11(fvec4) FAdd 125 126
+                              Store 104(outv) 127
+                              Line 1 62 0
+             132:         129 Load 131(s2d)
+             136:   11(fvec4) ImageSampleImplicitLod 132 135
+             137:   11(fvec4) Load 104(outv)
+             138:   11(fvec4) FAdd 137 136
+                              Store 104(outv) 138
+                              Line 1 64 0
+             140:    139(ptr) AccessChain 108 24 24
+             141:      7(int) Load 140
+                              SelectionMerge 145 None
+                              Switch 141 144 
+                                     case 10: 142
+                                     case 20: 143
+             144:               Label
+                                Line 1 73 0
+             156:   11(fvec4)   Load 104(outv)
+             157:   11(fvec4)   CompositeConstruct 34 34 34 34
+             158:   11(fvec4)   FSub 156 157
+                                Store 104(outv) 158
+                                Line 1 74 0
+                                Branch 145
+             142:               Label
+                                Line 1 66 0
+             146:   11(fvec4)   Load 104(outv)
+             147:   11(fvec4)   CompositeConstruct 34 34 34 34
+             148:   11(fvec4)   FAdd 146 147
+                                Store 104(outv) 148
+                                Line 1 67 0
+                                Branch 145
+             143:               Label
+                                Line 1 69 0
+             150:   11(fvec4)   Load 104(outv)
+             151:   11(fvec4)   VectorTimesScalar 150 50
+                                Store 104(outv) 151
+                                Line 1 70 0
+             152:   11(fvec4)   Load 104(outv)
+             153:   11(fvec4)   CompositeConstruct 34 34 34 34
+             154:   11(fvec4)   FAdd 152 153
+                                Store 104(outv) 154
+                                Line 1 71 0
+                                Branch 145
+             145:             Label
+                              Line 1 77 0
+                              Store 161(i) 24
+                              Branch 162
+             162:             Label
+                              Line 1 77 0
+                              LoopMerge 164 165 None
+                              Branch 166
+             166:             Label
+                              Line 1 77 0
+             167:      7(int) Load 161(i)
+             169:    42(bool) SLessThan 167 168
+                              BranchConditional 169 163 164
+             163:               Label
+                                Line 1 78 0
+             170:   11(fvec4)   Load 104(outv)
+             171:   11(fvec4)   VectorTimesScalar 170 41
+                                Store 104(outv) 171
+                                Branch 165
+             165:               Label
+                                Line 1 77 0
+             172:      7(int)   Load 161(i)
+             173:      7(int)   IAdd 172 81
+                                Store 161(i) 173
+                                Branch 162
+             164:             Label
+                              Line 1 80 0
+             175:    174(ptr) AccessChain 104(outv) 38
+             176:   10(float) Load 175
+             178:    42(bool) FOrdLessThan 176 177
+                              SelectionMerge 181 None
+                              BranchConditional 178 180 184
+             180:               Label
+                                Line 1 81 0
+             182:   11(fvec4)   Load 104(outv)
+             183:   11(fvec4)   ExtInst 2(GLSL.std.450) 13(Sin) 182
+                                Store 104(outv) 183
+                                Store 179 183
+                                Branch 181
+             184:               Label
+                                Line 1 82 0
+             185:   11(fvec4)   Load 104(outv)
+             186:   11(fvec4)   ExtInst 2(GLSL.std.450) 14(Cos) 185
+                                Store 104(outv) 186
+                                Store 179 186
+                                Branch 181
+             181:             Label
                               Return
                               FunctionEnd
                               Line 1 16 13
 14(foo(struct-S-i11;):   11(fvec4) Function None 12
            13(s):      9(ptr) FunctionParameter
               15:             Label
-           17(r):     16(ptr) Variable Function
+           23(r):     22(ptr) Variable Function
                               Line 1 18 0
-              20:     19(ptr) AccessChain 13(s) 18
-              21:      7(int) Load 20
-              22:   10(float) ConvertSToF 21
-              25:   11(fvec4) Load 24(inv)
-              26:   11(fvec4) VectorTimesScalar 25 22
-                              Store 17(r) 26
+              26:     25(ptr) AccessChain 13(s) 24
+              27:      7(int) Load 26
+              28:   10(float) ConvertSToF 27
+              31:   11(fvec4) Load 30(inv)
+              32:   11(fvec4) VectorTimesScalar 31 28
+                              Store 23(r) 32
                               Line 1 19 0
-              27:   11(fvec4) Load 17(r)
-              29:   11(fvec4) CompositeConstruct 28 28 28 28
-              30:   11(fvec4) FAdd 27 29
-                              Store 17(r) 30
+              33:   11(fvec4) Load 23(r)
+              35:   11(fvec4) CompositeConstruct 34 34 34 34
+              36:   11(fvec4) FAdd 33 35
+                              Store 23(r) 36
                               Line 1 20 0
-              34:     33(ptr) AccessChain 17(r) 32
-              35:   10(float) Load 34
-              38:    37(bool) FOrdGreaterThan 35 36
-                              SelectionMerge 40 None
-                              BranchConditional 38 39 44
-              39:               Label
-                                Line 1 21 0
-              41:   11(fvec4)   Load 17(r)
-              42:   11(fvec4)   CompositeConstruct 28 28 28 28
-              43:   11(fvec4)   FSub 41 42
-                                Store 17(r) 43
-                                Branch 40
+              39:     16(ptr) AccessChain 23(r) 38
+              40:   10(float) Load 39
+              43:    42(bool) FOrdGreaterThan 40 41
+                              SelectionMerge 45 None
+                              BranchConditional 43 44 49
               44:               Label
+                                Line 1 21 0
+              46:   11(fvec4)   Load 23(r)
+              47:   11(fvec4)   CompositeConstruct 34 34 34 34
+              48:   11(fvec4)   FSub 46 47
+                                Store 23(r) 48
+                                Branch 45
+              49:               Label
                                 Line 1 23 0
-              46:   11(fvec4)   Load 17(r)
-              47:   11(fvec4)   VectorTimesScalar 46 45
-                                Store 17(r) 47
-                                Branch 40
-              40:             Label
+              51:   11(fvec4)   Load 23(r)
+              52:   11(fvec4)   VectorTimesScalar 51 50
+                                Store 23(r) 52
+                                Branch 45
+              45:             Label
                               Line 1 25 0
-              48:   11(fvec4) Load 17(r)
-                              ReturnValue 48
+              53:   11(fvec4) Load 23(r)
+                              ReturnValue 53
+                              FunctionEnd
+                              Line 1 28 34
+20(testBranch(f1;f1;):   10(float) Function None 17
+           18(x):     16(ptr) FunctionParameter
+           19(y):     16(ptr) FunctionParameter
+              21:             Label
+      56(result):     16(ptr) Variable Function
+           59(b):     58(ptr) Variable Function
+              90:     16(ptr) Variable Function
+                              Line 1 30 0
+                              Store 56(result) 57
+                              Line 1 31 0
+              60:   10(float) Load 18(x)
+              61:    42(bool) FOrdGreaterThan 60 57
+                              Store 59(b) 61
+                              Line 1 34 0
+              62:    42(bool) Load 59(b)
+                              SelectionMerge 64 None
+                              BranchConditional 62 63 67
+              63:               Label
+                                Line 1 35 0
+              65:   10(float)   Load 56(result)
+              66:   10(float)   FAdd 65 34
+                                Store 56(result) 66
+                                Branch 64
+              67:               Label
+                                Line 1 38 0
+              68:   10(float)   Load 56(result)
+              69:   10(float)   FSub 68 34
+                                Store 56(result) 69
+                                Branch 64
+              64:             Label
+                              Line 1 42 0
+              70:   10(float) Load 18(x)
+              71:   10(float) Load 19(y)
+              72:    42(bool) FOrdGreaterThan 70 71
+                              SelectionMerge 74 None
+                              BranchConditional 72 73 74
+              73:               Label
+                                Line 1 43 0
+              75:   10(float)   Load 18(x)
+              76:   10(float)   Load 19(y)
+              77:   10(float)   FSub 75 76
+              78:   10(float)   Load 56(result)
+              79:   10(float)   FAdd 78 77
+                                Store 56(result) 79
+                                Branch 74
+              74:             Label
+                              Line 1 47 0
+              80:    42(bool) Load 59(b)
+              83:      7(int) Select 80 81 82
+              84:   10(float) ConvertSToF 83
+              85:   10(float) Load 56(result)
+              86:   10(float) FAdd 85 84
+                              Store 56(result) 86
+                              Line 1 51 0
+              87:   10(float) Load 18(x)
+              88:   10(float) Load 19(y)
+              89:    42(bool) FOrdLessThan 87 88
+                              SelectionMerge 92 None
+                              BranchConditional 89 91 94
+              91:               Label
+                                Line 1 52 0
+              93:   10(float)   Load 19(y)
+                                Store 90 93
+                                Branch 92
+              94:               Label
+                                Line 1 53 0
+              95:    42(bool)   Load 59(b)
+              96:   10(float)   Select 95 34 57
+                                Store 90 96
+                                Branch 92
+              92:             Label
+              97:   10(float) Load 90
+                              Line 1 51 0
+              98:   10(float) Load 56(result)
+              99:   10(float) FAdd 98 97
+                              Store 56(result) 99
+                              Line 1 55 0
+             100:   10(float) Load 56(result)
+                              ReturnValue 100
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out b/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out
new file mode 100644
index 0000000..ad431a4
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out
@@ -0,0 +1,96 @@
+spv.debuginfo.const_params.glsl.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 68
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 14  "main"
+                              ExecutionMode 14 LocalSize 1 1 1
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              25:             String  "float"
+              40:             String  "function"
+              46:             String  "f"
+              50:             String  "f2"
+              53:             String  "f3"
+              56:             String  "f4"
+                              Name 14  "main"
+                              Name 39  "function(f1;vf2;vf3;vf4;"
+                              Name 35  "f"
+                              Name 36  "f2"
+                              Name 37  "f3"
+                              Name 38  "f4"
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              24:             TypeFloat 32
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
+              27:             TypeVector 24(float) 2
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 22
+              29:             TypeVector 24(float) 3
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
+              31:             TypeVector 24(float) 4
+              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
+              33:             TypeFunction 4 24(float) 27(fvec2) 29(fvec3) 31(fvec4)
+              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 26 28 30 32
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 40 34 17 12 12 19 40 13 12
+              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 26 17 12 12 41 21 20
+              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 28 17 12 12 41 21 22
+              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 30 17 12 12 41 21 13
+              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 56 32 17 12 12 41 21 21
+              62:      7(int) Constant 13
+              63:   24(float) Constant 0
+              64:   27(fvec2) ConstantComposite 63 63
+              65:   29(fvec3) ConstantComposite 63 63 63
+              66:   31(fvec4) ConstantComposite 63 63 63 63
+                              Line 1 11 11
+        14(main):           4 Function None 5
+              23:             Label
+              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 62 62 12 12
+              67:           4 FunctionCall 39(function(f1;vf2;vf3;vf4;) 63 64 65 66
+                              Return
+                              FunctionEnd
+                              Line 1 7 18
+39(function(f1;vf2;vf3;vf4;):           4 Function None 33
+           35(f):   24(float) FunctionParameter
+          36(f2):   27(fvec2) FunctionParameter
+          37(f3):   29(fvec3) FunctionParameter
+          38(f4):   31(fvec4) FunctionParameter
+              42:             Label
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
+              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 35(f) 48
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 36(f2) 48
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 37(f3) 48
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 55 38(f4) 48
+              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 41 39(function(f1;vf2;vf3;vf4;)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.comp.out b/Test/baseResults/spv.debuginfo.glsl.comp.out
index 9e46450..234878f 100644
--- a/Test/baseResults/spv.debuginfo.glsl.comp.out
+++ b/Test/baseResults/spv.debuginfo.glsl.comp.out
@@ -1,1063 +1,1223 @@
 spv.debuginfo.glsl.comp
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 817
+// Id's are bound by 969
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint GLCompute 14  "main" 124
+                              ExecutionMode 14 LocalSize 10 10 1
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              25:             String  "float"
+              37:             String  "springForce"
+              43:             String  "p0"
+              47:             String  "p1"
+              50:             String  "restDist"
+              58:             String  "dist"
+              70:             String  "int"
+              76:             String  "sphereRadius"
+              87:             String  "gravity"
+              92:             String  "particleCount"
+              95:             String  "UBO"
+              99:             String  "params"
+             121:             String  "id"
+             126:             String  "gl_GlobalInvocationID"
+             133:             String  "index"
+             156:             String  "bool"
+             170:             String  "normal"
+             176:             String  "pinned"
+             178:             String  "Particle"
+             183:             String  "particleIn"
+             187:             String  "ParticleIn"
+             208:             String  "particleOut"
+             211:             String  "ParticleOut"
+             236:             String  "force"
+             249:             String  "pos"
+             259:             String  "vel"
+             571:             String  "f"
+             620:             String  "sphereDist"
+             673:             String  "calculateNormals"
+             676:             String  "PushConsts"
+             680:             String  "pushConsts"
+             717:             String  "a"
+             730:             String  "b"
+             747:             String  "c"
+                              Name 14  "main"
+                              Name 36  "springForce(vf3;vf3;f1;"
+                              Name 33  "p0"
+                              Name 34  "p1"
+                              Name 35  "restDist"
+                              Name 56  "dist"
+                              Name 74  "UBO"
+                              MemberName 74(UBO) 0  "deltaT"
+                              MemberName 74(UBO) 1  "particleMass"
+                              MemberName 74(UBO) 2  "springStiffness"
+                              MemberName 74(UBO) 3  "damping"
+                              MemberName 74(UBO) 4  "restDistH"
+                              MemberName 74(UBO) 5  "restDistV"
+                              MemberName 74(UBO) 6  "restDistD"
+                              MemberName 74(UBO) 7  "sphereRadius"
+                              MemberName 74(UBO) 8  "spherePos"
+                              MemberName 74(UBO) 9  "gravity"
+                              MemberName 74(UBO) 10  "particleCount"
+                              Name 97  "params"
+                              Name 119  "id"
+                              Name 124  "gl_GlobalInvocationID"
+                              Name 131  "index"
+                              Name 168  "Particle"
+                              MemberName 168(Particle) 0  "pos"
+                              MemberName 168(Particle) 1  "vel"
+                              MemberName 168(Particle) 2  "uv"
+                              MemberName 168(Particle) 3  "normal"
+                              MemberName 168(Particle) 4  "pinned"
+                              Name 181  "ParticleIn"
+                              MemberName 181(ParticleIn) 0  "particleIn"
+                              Name 189  ""
+                              Name 206  "ParticleOut"
+                              MemberName 206(ParticleOut) 0  "particleOut"
+                              Name 213  ""
+                              Name 234  "force"
+                              Name 247  "pos"
+                              Name 257  "vel"
+                              Name 278  "param"
+                              Name 282  "param"
+                              Name 284  "param"
+                              Name 308  "param"
+                              Name 312  "param"
+                              Name 314  "param"
+                              Name 342  "param"
+                              Name 346  "param"
+                              Name 348  "param"
+                              Name 371  "param"
+                              Name 375  "param"
+                              Name 377  "param"
+                              Name 415  "param"
+                              Name 419  "param"
+                              Name 421  "param"
+                              Name 454  "param"
+                              Name 458  "param"
+                              Name 460  "param"
+                              Name 501  "param"
+                              Name 505  "param"
+                              Name 507  "param"
+                              Name 544  "param"
+                              Name 548  "param"
+                              Name 550  "param"
+                              Name 569  "f"
+                              Name 618  "sphereDist"
+                              Name 671  "PushConsts"
+                              MemberName 671(PushConsts) 0  "calculateNormals"
+                              Name 678  "pushConsts"
+                              Name 691  "normal"
+                              Name 715  "a"
+                              Name 728  "b"
+                              Name 745  "c"
+                              MemberDecorate 74(UBO) 0 Offset 0
+                              MemberDecorate 74(UBO) 1 Offset 4
+                              MemberDecorate 74(UBO) 2 Offset 8
+                              MemberDecorate 74(UBO) 3 Offset 12
+                              MemberDecorate 74(UBO) 4 Offset 16
+                              MemberDecorate 74(UBO) 5 Offset 20
+                              MemberDecorate 74(UBO) 6 Offset 24
+                              MemberDecorate 74(UBO) 7 Offset 28
+                              MemberDecorate 74(UBO) 8 Offset 32
+                              MemberDecorate 74(UBO) 9 Offset 48
+                              MemberDecorate 74(UBO) 10 Offset 64
+                              Decorate 74(UBO) Block
+                              Decorate 97(params) DescriptorSet 0
+                              Decorate 97(params) Binding 2
+                              Decorate 124(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
+                              MemberDecorate 168(Particle) 0 Offset 0
+                              MemberDecorate 168(Particle) 1 Offset 16
+                              MemberDecorate 168(Particle) 2 Offset 32
+                              MemberDecorate 168(Particle) 3 Offset 48
+                              MemberDecorate 168(Particle) 4 Offset 64
+                              Decorate 179 ArrayStride 80
+                              MemberDecorate 181(ParticleIn) 0 Offset 0
+                              Decorate 181(ParticleIn) BufferBlock
+                              Decorate 189 DescriptorSet 0
+                              Decorate 189 Binding 0
+                              Decorate 204 ArrayStride 80
+                              MemberDecorate 206(ParticleOut) 0 Offset 0
+                              Decorate 206(ParticleOut) BufferBlock
+                              Decorate 213 DescriptorSet 0
+                              Decorate 213 Binding 1
+                              MemberDecorate 671(PushConsts) 0 Offset 0
+                              Decorate 671(PushConsts) Block
+                              Decorate 968 BuiltIn WorkgroupSize
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              24:             TypeFloat 32
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
+              27:             TypeVector 24(float) 3
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
+              29:             TypePointer Function 27(fvec3)
+              30:             TypePointer Function 24(float)
+              31:             TypeFunction 27(fvec3) 29(ptr) 29(ptr) 30(ptr)
+              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 28 28 28 26
+              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 37 32 17 12 12 19 37 13 12
+              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 43 28 17 12 12 38 21 20
+              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 28 17 12 12 38 21 22
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 26 17 12 12 38 21 13
+              55:      7(int) Constant 68
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 58 28 17 55 12 38 21
+              64:      7(int) Constant 69
+              67:             TypeVector 24(float) 4
+              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
+              69:             TypeInt 32 1
+              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 70 10 21 12
+              72:             TypeVector 69(int) 2
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 71 22
+         74(UBO):             TypeStruct 24(float) 24(float) 24(float) 24(float) 24(float) 24(float) 24(float) 24(float) 67(fvec4) 67(fvec4) 72(ivec2)
+              77:      7(int) Constant 56
+              78:      7(int) Constant 8
+              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
+              88:      7(int) Constant 58
+              89:      7(int) Constant 7
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 68 17 88 89 12 12 13
+              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 68 17 88 89 12 12 13
+              93:      7(int) Constant 59
+              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 92 73 17 93 78 12 12 13
+              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 95 20 17 64 12 19 95 12 13 75 79 80 81 82 83 84 85 86 90 91
+              96:             TypePointer Uniform 74(UBO)
+      97(params):     96(ptr) Variable Uniform
+              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 99 94 17 64 12 19 99 97(params) 78
+             100:     69(int) Constant 2
+             101:             TypePointer Uniform 24(float)
+             115:      7(int) Constant 74
+             116:             TypeVector 7(int) 3
+             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 8 13
+             118:             TypePointer Function 116(ivec3)
+             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 121 117 17 115 12 16 21
+             123:             TypePointer Input 116(ivec3)
+124(gl_GlobalInvocationID):    123(ptr) Variable Input
+             125:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 126 117 17 115 12 19 126 124(gl_GlobalInvocationID) 78
+             129:      7(int) Constant 76
+             130:             TypePointer Function 7(int)
+             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 133 8 17 129 12 16 21
+             137:     69(int) Constant 10
+             138:             TypePointer Uniform 69(int)
+             147:      7(int) Constant 77
+             155:             TypeBool
+             157:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             163:      7(int) Constant 78
+             167:      7(int) Constant 81
+   168(Particle):             TypeStruct 67(fvec4) 67(fvec4) 67(fvec4) 67(fvec4) 24(float)
+             171:      7(int) Constant 31
+             169:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
+             172:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
+             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
+             174:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
+             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 176 26 17 10 78 12 12 13
+             177:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 20 17 167 12 19 178 12 13 169 172 173 174 175
+             179:             TypeRuntimeArray 168(Particle)
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 177 12
+ 181(ParticleIn):             TypeStruct 179
+             184:      7(int) Constant 36
+             185:      7(int) Constant 11
+             182:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 183 180 17 184 185 12 12 13
+             186:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 187 20 17 167 12 19 187 12 13 182
+             188:             TypePointer Uniform 181(ParticleIn)
+             189:    188(ptr) Variable Uniform
+             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 186 17 167 12 19 1 189 78
+             191:     69(int) Constant 0
+             193:     69(int) Constant 4
+             196:   24(float) Constant 1065353216
+             197:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             203:      7(int) Constant 82
+             204:             TypeRuntimeArray 168(Particle)
+             205:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 177 12
+206(ParticleOut):             TypeStruct 204
+             209:      7(int) Constant 40
+             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 208 205 17 209 185 12 12 13
+             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 211 20 17 203 12 19 211 12 13 207
+             212:             TypePointer Uniform 206(ParticleOut)
+             213:    212(ptr) Variable Uniform
+             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 210 17 203 12 19 1 213 78
+             217:             TypePointer Uniform 67(fvec4)
+             222:      7(int) Constant 83
+             224:     69(int) Constant 1
+             225:   24(float) Constant 0
+             226:   67(fvec4) ConstantComposite 225 225 225 225
+             229:      7(int) Constant 84
+             233:      7(int) Constant 88
+             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 236 28 17 233 12 16 21
+             238:     69(int) Constant 9
+             246:      7(int) Constant 90
+             248:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 249 28 17 246 12 16 21
+             256:      7(int) Constant 91
+             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 259 28 17 256 12 16 21
+             266:      7(int) Constant 95
+             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             275:      7(int) Constant 96
+             292:      7(int) Constant 99
+             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             305:      7(int) Constant 100
+             322:      7(int) Constant 103
+             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             335:      7(int) Constant 104
+             341:     69(int) Constant 5
+             356:      7(int) Constant 107
+             359:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             365:      7(int) Constant 108
+             385:      7(int) Constant 111
+             388:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             400:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             407:      7(int) Constant 112
+             414:     69(int) Constant 6
+             429:      7(int) Constant 115
+             432:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             440:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             447:      7(int) Constant 116
+             468:      7(int) Constant 119
+             475:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             487:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             494:      7(int) Constant 120
+             515:      7(int) Constant 123
+             522:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             530:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             537:      7(int) Constant 124
+             558:      7(int) Constant 127
+             559:     69(int) Constant 3
+             568:      7(int) Constant 130
+             570:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 571 28 17 568 12 16 21
+             579:      7(int) Constant 131
+             587:   24(float) Constant 1056964608
+             603:      7(int) Constant 132
+             617:      7(int) Constant 135
+             619:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 620 28 17 617 12 16 21
+             626:     69(int) Constant 8
+             632:      7(int) Constant 136
+             635:     69(int) Constant 7
+             638:   24(float) Constant 1008981770
+             640:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             646:      7(int) Constant 138
+             665:      7(int) Constant 140
+             670:      7(int) Constant 144
+ 671(PushConsts):             TypeStruct 7(int)
+             674:      7(int) Constant 63
+             672:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 673 8 17 674 89 12 12 13
+             675:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 676 20 17 670 12 19 676 12 13 672
+             677:             TypePointer PushConstant 671(PushConsts)
+ 678(pushConsts):    677(ptr) Variable PushConstant
+             679:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 680 675 17 670 12 19 680 678(pushConsts) 78
+             681:             TypePointer PushConstant 7(int)
+             684:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             690:      7(int) Constant 145
+             692:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 170 28 17 690 12 16 21
+             694:   27(fvec3) ConstantComposite 225 225 225
+             696:      7(int) Constant 147
+             699:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             705:      7(int) Constant 148
+             708:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             714:      7(int) Constant 149
+             716:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 717 28 17 714 12 16 21
+             727:      7(int) Constant 150
+             729:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 730 28 17 727 12 16 21
+             744:      7(int) Constant 151
+             746:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 747 28 17 744 12 16 21
+             760:      7(int) Constant 152
+             772:      7(int) Constant 154
+             779:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             785:      7(int) Constant 155
+             797:      7(int) Constant 156
+             810:      7(int) Constant 157
+             819:      7(int) Constant 158
+             831:      7(int) Constant 161
+             838:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             844:      7(int) Constant 162
+             847:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             853:      7(int) Constant 163
+             865:      7(int) Constant 164
+             878:      7(int) Constant 165
+             887:      7(int) Constant 166
+             899:      7(int) Constant 168
+             906:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
+             912:      7(int) Constant 169
+             921:      7(int) Constant 170
+             934:      7(int) Constant 171
+             946:      7(int) Constant 172
+             958:      7(int) Constant 175
+             967:      7(int) Constant 10
+             968:  116(ivec3) ConstantComposite 967 967 20
+                              Line 1 72 11
+        14(main):           4 Function None 5
+              23:             Label
+         119(id):    118(ptr) Variable Function
+      131(index):    130(ptr) Variable Function
+      234(force):     29(ptr) Variable Function
+        247(pos):     29(ptr) Variable Function
+        257(vel):     29(ptr) Variable Function
+      278(param):     29(ptr) Variable Function
+      282(param):     29(ptr) Variable Function
+      284(param):     30(ptr) Variable Function
+      308(param):     29(ptr) Variable Function
+      312(param):     29(ptr) Variable Function
+      314(param):     30(ptr) Variable Function
+      342(param):     29(ptr) Variable Function
+      346(param):     29(ptr) Variable Function
+      348(param):     30(ptr) Variable Function
+      371(param):     29(ptr) Variable Function
+      375(param):     29(ptr) Variable Function
+      377(param):     30(ptr) Variable Function
+      415(param):     29(ptr) Variable Function
+      419(param):     29(ptr) Variable Function
+      421(param):     30(ptr) Variable Function
+      454(param):     29(ptr) Variable Function
+      458(param):     29(ptr) Variable Function
+      460(param):     30(ptr) Variable Function
+      501(param):     29(ptr) Variable Function
+      505(param):     29(ptr) Variable Function
+      507(param):     30(ptr) Variable Function
+      544(param):     29(ptr) Variable Function
+      548(param):     29(ptr) Variable Function
+      550(param):     30(ptr) Variable Function
+          569(f):     29(ptr) Variable Function
+ 618(sphereDist):     29(ptr) Variable Function
+     691(normal):     29(ptr) Variable Function
+          715(a):     29(ptr) Variable Function
+          728(b):     29(ptr) Variable Function
+          745(c):     29(ptr) Variable Function
+             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+             113:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 115 115 12 12
+             122:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 120 119(id) 45
+             127:  116(ivec3) Load 124(gl_GlobalInvocationID)
+                              Store 119(id) 127
+             128:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 129 129 12 12
+             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 132 131(index) 45
+             135:    130(ptr) AccessChain 119(id) 20
+             136:      7(int) Load 135
+             139:    138(ptr) AccessChain 97(params) 137 12
+             140:     69(int) Load 139
+             141:      7(int) Bitcast 140
+             142:      7(int) IMul 136 141
+             143:    130(ptr) AccessChain 119(id) 12
+             144:      7(int) Load 143
+             145:      7(int) IAdd 142 144
+                              Store 131(index) 145
+             146:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 147 147 12 12
+             148:      7(int) Load 131(index)
+             149:    138(ptr) AccessChain 97(params) 137 12
+             150:     69(int) Load 149
+             151:    138(ptr) AccessChain 97(params) 137 20
+             152:     69(int) Load 151
+             153:     69(int) IMul 150 152
+             154:      7(int) Bitcast 153
+             158:   155(bool) UGreaterThan 148 154
+                              SelectionMerge 160 None
+                              BranchConditional 158 159 160
+             159:               Label
+             161:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             162:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 163 163 12 12
                                 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
+             160:             Label
+             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             166:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 167 167 12 12
+             192:      7(int) Load 131(index)
+             194:    101(ptr) AccessChain 189 191 192 193
+             195:   24(float) Load 194
+             198:   155(bool) FOrdEqual 195 196
+                              SelectionMerge 200 None
+                              BranchConditional 198 199 200
+             199:               Label
+             201:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             202:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 203 203 12 12
+             215:      7(int)   Load 131(index)
+             216:      7(int)   Load 131(index)
+             218:    217(ptr)   AccessChain 213 191 216 191
+             219:   67(fvec4)   Load 218
+             220:    217(ptr)   AccessChain 213 191 215 191
+                                Store 220 219
+             221:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 222 222 12 12
+             223:      7(int)   Load 131(index)
+             227:    217(ptr)   AccessChain 213 191 223 224
+                                Store 227 226
+             228:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 229 229 12 12
                                 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
+             200:             Label
+             231:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 233 233 12 12
+             237:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 235 234(force) 45
+             239:    217(ptr) AccessChain 97(params) 238
+             240:   67(fvec4) Load 239
+             241:   27(fvec3) VectorShuffle 240 240 0 1 2
+             242:    101(ptr) AccessChain 97(params) 224
+             243:   24(float) Load 242
+             244:   27(fvec3) VectorTimesScalar 241 243
+                              Store 234(force) 244
+             245:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 246 246 12 12
+             250:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 248 247(pos) 45
+             251:      7(int) Load 131(index)
+             252:    217(ptr) AccessChain 189 191 251 191
+             253:   67(fvec4) Load 252
+             254:   27(fvec3) VectorShuffle 253 253 0 1 2
+                              Store 247(pos) 254
+             255:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 256 256 12 12
+             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 258 257(vel) 45
+             261:      7(int) Load 131(index)
+             262:    217(ptr) AccessChain 189 191 261 224
+             263:   67(fvec4) Load 262
+             264:   27(fvec3) VectorShuffle 263 263 0 1 2
+                              Store 257(vel) 264
+             265:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 266 266 12 12
+             267:    130(ptr) AccessChain 119(id) 12
+             268:      7(int) Load 267
+             270:   155(bool) UGreaterThan 268 12
+                              SelectionMerge 272 None
+                              BranchConditional 270 271 272
+             271:               Label
+             273:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             274:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 275 275 12 12
+             276:      7(int)   Load 131(index)
+             277:      7(int)   ISub 276 20
+             279:    217(ptr)   AccessChain 189 191 277 191
+             280:   67(fvec4)   Load 279
+             281:   27(fvec3)   VectorShuffle 280 280 0 1 2
+                                Store 278(param) 281
+             283:   27(fvec3)   Load 247(pos)
+                                Store 282(param) 283
+             285:    101(ptr)   AccessChain 97(params) 193
+             286:   24(float)   Load 285
+                                Store 284(param) 286
+             287:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 278(param) 282(param) 284(param)
+             288:   27(fvec3)   Load 234(force)
+             289:   27(fvec3)   FAdd 288 287
+                                Store 234(force) 289
+                                Branch 272
+             272:             Label
+             290:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             291:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 292 292 12 12
+             293:    130(ptr) AccessChain 119(id) 12
+             294:      7(int) Load 293
+             295:    138(ptr) AccessChain 97(params) 137 12
+             296:     69(int) Load 295
+             297:     69(int) ISub 296 224
+             298:      7(int) Bitcast 297
+             300:   155(bool) ULessThan 294 298
+                              SelectionMerge 302 None
+                              BranchConditional 300 301 302
+             301:               Label
+             303:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             304:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 305 305 12 12
+             306:      7(int)   Load 131(index)
+             307:      7(int)   IAdd 306 20
+             309:    217(ptr)   AccessChain 189 191 307 191
+             310:   67(fvec4)   Load 309
+             311:   27(fvec3)   VectorShuffle 310 310 0 1 2
+                                Store 308(param) 311
+             313:   27(fvec3)   Load 247(pos)
+                                Store 312(param) 313
+             315:    101(ptr)   AccessChain 97(params) 193
+             316:   24(float)   Load 315
+                                Store 314(param) 316
+             317:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 308(param) 312(param) 314(param)
+             318:   27(fvec3)   Load 234(force)
+             319:   27(fvec3)   FAdd 318 317
+                                Store 234(force) 319
+                                Branch 302
+             302:             Label
+             320:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 322 322 12 12
+             323:    130(ptr) AccessChain 119(id) 20
+             324:      7(int) Load 323
+             325:    138(ptr) AccessChain 97(params) 137 20
+             326:     69(int) Load 325
+             327:     69(int) ISub 326 224
+             328:      7(int) Bitcast 327
+             330:   155(bool) ULessThan 324 328
+                              SelectionMerge 332 None
+                              BranchConditional 330 331 332
+             331:               Label
+             333:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             334:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 335 335 12 12
+             336:      7(int)   Load 131(index)
+             337:    138(ptr)   AccessChain 97(params) 137 12
+             338:     69(int)   Load 337
+             339:      7(int)   Bitcast 338
+             340:      7(int)   IAdd 336 339
+             343:    217(ptr)   AccessChain 189 191 340 191
+             344:   67(fvec4)   Load 343
+             345:   27(fvec3)   VectorShuffle 344 344 0 1 2
+                                Store 342(param) 345
+             347:   27(fvec3)   Load 247(pos)
+                                Store 346(param) 347
+             349:    101(ptr)   AccessChain 97(params) 341
+             350:   24(float)   Load 349
+                                Store 348(param) 350
+             351:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 342(param) 346(param) 348(param)
+             352:   27(fvec3)   Load 234(force)
+             353:   27(fvec3)   FAdd 352 351
+                                Store 234(force) 353
+                                Branch 332
+             332:             Label
+             354:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             355:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 356 356 12 12
+             357:    130(ptr) AccessChain 119(id) 20
+             358:      7(int) Load 357
+             360:   155(bool) UGreaterThan 358 12
+                              SelectionMerge 362 None
+                              BranchConditional 360 361 362
+             361:               Label
+             363:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             364:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 365 365 12 12
+             366:      7(int)   Load 131(index)
+             367:    138(ptr)   AccessChain 97(params) 137 12
+             368:     69(int)   Load 367
+             369:      7(int)   Bitcast 368
+             370:      7(int)   ISub 366 369
+             372:    217(ptr)   AccessChain 189 191 370 191
+             373:   67(fvec4)   Load 372
+             374:   27(fvec3)   VectorShuffle 373 373 0 1 2
+                                Store 371(param) 374
+             376:   27(fvec3)   Load 247(pos)
+                                Store 375(param) 376
+             378:    101(ptr)   AccessChain 97(params) 341
+             379:   24(float)   Load 378
+                                Store 377(param) 379
+             380:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 371(param) 375(param) 377(param)
+             381:   27(fvec3)   Load 234(force)
+             382:   27(fvec3)   FAdd 381 380
+                                Store 234(force) 382
+                                Branch 362
+             362:             Label
+             383:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             384:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 385 385 12 12
+             386:    130(ptr) AccessChain 119(id) 12
+             387:      7(int) Load 386
+             389:   155(bool) UGreaterThan 387 12
+                              SelectionMerge 391 None
+                              BranchConditional 389 390 391
+             390:               Label
+             392:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             393:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 385 385 12 12
+             394:    130(ptr)   AccessChain 119(id) 20
+             395:      7(int)   Load 394
+             396:    138(ptr)   AccessChain 97(params) 137 20
+             397:     69(int)   Load 396
+             398:     69(int)   ISub 397 224
+             399:      7(int)   Bitcast 398
+             401:   155(bool)   ULessThan 395 399
+                                Branch 391
+             391:             Label
+             402:   155(bool) Phi 389 362 401 390
+                              SelectionMerge 404 None
+                              BranchConditional 402 403 404
+             403:               Label
+             405:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             406:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 407 407 12 12
+             408:      7(int)   Load 131(index)
+             409:    138(ptr)   AccessChain 97(params) 137 12
+             410:     69(int)   Load 409
+             411:      7(int)   Bitcast 410
+             412:      7(int)   IAdd 408 411
+             413:      7(int)   ISub 412 20
+             416:    217(ptr)   AccessChain 189 191 413 191
+             417:   67(fvec4)   Load 416
+             418:   27(fvec3)   VectorShuffle 417 417 0 1 2
+                                Store 415(param) 418
+             420:   27(fvec3)   Load 247(pos)
+                                Store 419(param) 420
+             422:    101(ptr)   AccessChain 97(params) 414
+             423:   24(float)   Load 422
+                                Store 421(param) 423
+             424:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 415(param) 419(param) 421(param)
+             425:   27(fvec3)   Load 234(force)
+             426:   27(fvec3)   FAdd 425 424
+                                Store 234(force) 426
+                                Branch 404
+             404:             Label
+             427:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             428:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 429 429 12 12
+             430:    130(ptr) AccessChain 119(id) 12
+             431:      7(int) Load 430
+             433:   155(bool) UGreaterThan 431 12
+                              SelectionMerge 435 None
+                              BranchConditional 433 434 435
+             434:               Label
+             436:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             437:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 429 429 12 12
+             438:    130(ptr)   AccessChain 119(id) 20
+             439:      7(int)   Load 438
+             441:   155(bool)   UGreaterThan 439 12
+                                Branch 435
+             435:             Label
+             442:   155(bool) Phi 433 404 441 434
+                              SelectionMerge 444 None
+                              BranchConditional 442 443 444
+             443:               Label
+             445:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             446:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 447 447 12 12
+             448:      7(int)   Load 131(index)
+             449:    138(ptr)   AccessChain 97(params) 137 12
+             450:     69(int)   Load 449
+             451:      7(int)   Bitcast 450
+             452:      7(int)   ISub 448 451
+             453:      7(int)   ISub 452 20
+             455:    217(ptr)   AccessChain 189 191 453 191
+             456:   67(fvec4)   Load 455
+             457:   27(fvec3)   VectorShuffle 456 456 0 1 2
+                                Store 454(param) 457
+             459:   27(fvec3)   Load 247(pos)
+                                Store 458(param) 459
+             461:    101(ptr)   AccessChain 97(params) 414
+             462:   24(float)   Load 461
+                                Store 460(param) 462
+             463:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 454(param) 458(param) 460(param)
+             464:   27(fvec3)   Load 234(force)
+             465:   27(fvec3)   FAdd 464 463
+                                Store 234(force) 465
+                                Branch 444
+             444:             Label
+             466:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             467:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 468 468 12 12
+             469:    130(ptr) AccessChain 119(id) 12
+             470:      7(int) Load 469
+             471:    138(ptr) AccessChain 97(params) 137 12
+             472:     69(int) Load 471
+             473:     69(int) ISub 472 224
+             474:      7(int) Bitcast 473
+             476:   155(bool) ULessThan 470 474
+                              SelectionMerge 478 None
+                              BranchConditional 476 477 478
+             477:               Label
+             479:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             480:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 468 468 12 12
+             481:    130(ptr)   AccessChain 119(id) 20
+             482:      7(int)   Load 481
+             483:    138(ptr)   AccessChain 97(params) 137 20
+             484:     69(int)   Load 483
+             485:     69(int)   ISub 484 224
+             486:      7(int)   Bitcast 485
+             488:   155(bool)   ULessThan 482 486
+                                Branch 478
+             478:             Label
+             489:   155(bool) Phi 476 444 488 477
+                              SelectionMerge 491 None
+                              BranchConditional 489 490 491
+             490:               Label
+             492:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             493:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 494 494 12 12
+             495:      7(int)   Load 131(index)
+             496:    138(ptr)   AccessChain 97(params) 137 12
+             497:     69(int)   Load 496
+             498:      7(int)   Bitcast 497
+             499:      7(int)   IAdd 495 498
+             500:      7(int)   IAdd 499 20
+             502:    217(ptr)   AccessChain 189 191 500 191
+             503:   67(fvec4)   Load 502
+             504:   27(fvec3)   VectorShuffle 503 503 0 1 2
+                                Store 501(param) 504
+             506:   27(fvec3)   Load 247(pos)
+                                Store 505(param) 506
+             508:    101(ptr)   AccessChain 97(params) 414
+             509:   24(float)   Load 508
+                                Store 507(param) 509
+             510:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 501(param) 505(param) 507(param)
+             511:   27(fvec3)   Load 234(force)
+             512:   27(fvec3)   FAdd 511 510
+                                Store 234(force) 512
+                                Branch 491
+             491:             Label
+             513:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             514:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 515 515 12 12
+             516:    130(ptr) AccessChain 119(id) 12
+             517:      7(int) Load 516
+             518:    138(ptr) AccessChain 97(params) 137 12
+             519:     69(int) Load 518
+             520:     69(int) ISub 519 224
+             521:      7(int) Bitcast 520
+             523:   155(bool) ULessThan 517 521
+                              SelectionMerge 525 None
+                              BranchConditional 523 524 525
+             524:               Label
+             526:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             527:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 515 515 12 12
+             528:    130(ptr)   AccessChain 119(id) 20
+             529:      7(int)   Load 528
+             531:   155(bool)   UGreaterThan 529 12
+                                Branch 525
+             525:             Label
+             532:   155(bool) Phi 523 491 531 524
+                              SelectionMerge 534 None
+                              BranchConditional 532 533 534
+             533:               Label
+             535:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             536:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 537 537 12 12
+             538:      7(int)   Load 131(index)
+             539:    138(ptr)   AccessChain 97(params) 137 12
+             540:     69(int)   Load 539
+             541:      7(int)   Bitcast 540
+             542:      7(int)   ISub 538 541
+             543:      7(int)   IAdd 542 20
+             545:    217(ptr)   AccessChain 189 191 543 191
+             546:   67(fvec4)   Load 545
+             547:   27(fvec3)   VectorShuffle 546 546 0 1 2
+                                Store 544(param) 547
+             549:   27(fvec3)   Load 247(pos)
+                                Store 548(param) 549
+             551:    101(ptr)   AccessChain 97(params) 414
+             552:   24(float)   Load 551
+                                Store 550(param) 552
+             553:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 544(param) 548(param) 550(param)
+             554:   27(fvec3)   Load 234(force)
+             555:   27(fvec3)   FAdd 554 553
+                                Store 234(force) 555
+                                Branch 534
+             534:             Label
+             556:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             557:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 558 558 12 12
+             560:    101(ptr) AccessChain 97(params) 559
+             561:   24(float) Load 560
+             562:   24(float) FNegate 561
+             563:   27(fvec3) Load 257(vel)
+             564:   27(fvec3) VectorTimesScalar 563 562
+             565:   27(fvec3) Load 234(force)
+             566:   27(fvec3) FAdd 565 564
+                              Store 234(force) 566
+             567:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 568 568 12 12
+             572:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 570 569(f) 45
+             573:   27(fvec3) Load 234(force)
+             574:    101(ptr) AccessChain 97(params) 224
+             575:   24(float) Load 574
+             576:   24(float) FDiv 196 575
+             577:   27(fvec3) VectorTimesScalar 573 576
+                              Store 569(f) 577
+             578:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 579 579 12 12
+             580:      7(int) Load 131(index)
+             581:   27(fvec3) Load 247(pos)
+             582:   27(fvec3) Load 257(vel)
+             583:    101(ptr) AccessChain 97(params) 191
+             584:   24(float) Load 583
+             585:   27(fvec3) VectorTimesScalar 582 584
+             586:   27(fvec3) FAdd 581 585
+             588:   27(fvec3) Load 569(f)
+             589:   27(fvec3) VectorTimesScalar 588 587
+             590:    101(ptr) AccessChain 97(params) 191
+             591:   24(float) Load 590
+             592:   27(fvec3) VectorTimesScalar 589 591
+             593:    101(ptr) AccessChain 97(params) 191
+             594:   24(float) Load 593
+             595:   27(fvec3) VectorTimesScalar 592 594
+             596:   27(fvec3) FAdd 586 595
+             597:   24(float) CompositeExtract 596 0
+             598:   24(float) CompositeExtract 596 1
+             599:   24(float) CompositeExtract 596 2
+             600:   67(fvec4) CompositeConstruct 597 598 599 196
+             601:    217(ptr) AccessChain 213 191 580 191
+                              Store 601 600
+             602:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 603 603 12 12
+             604:      7(int) Load 131(index)
+             605:   27(fvec3) Load 257(vel)
+             606:   27(fvec3) Load 569(f)
+             607:    101(ptr) AccessChain 97(params) 191
+             608:   24(float) Load 607
+             609:   27(fvec3) VectorTimesScalar 606 608
+             610:   27(fvec3) FAdd 605 609
+             611:   24(float) CompositeExtract 610 0
+             612:   24(float) CompositeExtract 610 1
+             613:   24(float) CompositeExtract 610 2
+             614:   67(fvec4) CompositeConstruct 611 612 613 225
+             615:    217(ptr) AccessChain 213 191 604 224
+                              Store 615 614
+             616:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 617 617 12 12
+             621:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 619 618(sphereDist) 45
+             622:      7(int) Load 131(index)
+             623:    217(ptr) AccessChain 213 191 622 191
+             624:   67(fvec4) Load 623
+             625:   27(fvec3) VectorShuffle 624 624 0 1 2
+             627:    217(ptr) AccessChain 97(params) 626
+             628:   67(fvec4) Load 627
+             629:   27(fvec3) VectorShuffle 628 628 0 1 2
+             630:   27(fvec3) FSub 625 629
+                              Store 618(sphereDist) 630
+             631:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
+             633:   27(fvec3) Load 618(sphereDist)
+             634:   24(float) ExtInst 3(GLSL.std.450) 66(Length) 633
+             636:    101(ptr) AccessChain 97(params) 635
+             637:   24(float) Load 636
+             639:   24(float) FAdd 637 638
+             641:   155(bool) FOrdLessThan 634 639
+                              SelectionMerge 643 None
+                              BranchConditional 641 642 643
+             642:               Label
+             644:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             645:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 646 646 12 12
+             647:      7(int)   Load 131(index)
+             648:    217(ptr)   AccessChain 97(params) 626
+             649:   67(fvec4)   Load 648
+             650:   27(fvec3)   VectorShuffle 649 649 0 1 2
+             651:   27(fvec3)   Load 618(sphereDist)
+             652:   27(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 651
+             653:    101(ptr)   AccessChain 97(params) 635
+             654:   24(float)   Load 653
+             655:   24(float)   FAdd 654 638
+             656:   27(fvec3)   VectorTimesScalar 652 655
+             657:   27(fvec3)   FAdd 650 656
+             658:    101(ptr)   AccessChain 213 191 647 191 12
+             659:   24(float)   CompositeExtract 657 0
+                                Store 658 659
+             660:    101(ptr)   AccessChain 213 191 647 191 20
+             661:   24(float)   CompositeExtract 657 1
+                                Store 660 661
+             662:    101(ptr)   AccessChain 213 191 647 191 22
+             663:   24(float)   CompositeExtract 657 2
+                                Store 662 663
+             664:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 665 665 12 12
+             666:      7(int)   Load 131(index)
+             667:    217(ptr)   AccessChain 213 191 666 224
+                                Store 667 226
+                                Branch 643
+             643:             Label
+             668:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             669:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 670 670 12 12
+             682:    681(ptr) AccessChain 678(pushConsts) 191
+             683:      7(int) Load 682
+             685:   155(bool) IEqual 683 20
+                              SelectionMerge 687 None
+                              BranchConditional 685 686 687
+             686:               Label
+             688:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             689:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 690 690 12 12
+             693:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 692 691(normal) 45
+                                Store 691(normal) 694
+             695:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 696 696 12 12
+             697:    130(ptr)   AccessChain 119(id) 20
+             698:      7(int)   Load 697
+             700:   155(bool)   UGreaterThan 698 12
+                                SelectionMerge 702 None
+                                BranchConditional 700 701 702
+             701:                 Label
+             703:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             704:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 705 705 12 12
+             706:    130(ptr)     AccessChain 119(id) 12
+             707:      7(int)     Load 706
+             709:   155(bool)     UGreaterThan 707 12
+                                  SelectionMerge 711 None
+                                  BranchConditional 709 710 711
+             710:                   Label
+             712:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             713:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 714 714 12 12
+             718:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 716 715(a) 45
+             719:      7(int)       Load 131(index)
+             720:      7(int)       ISub 719 20
+             721:    217(ptr)       AccessChain 189 191 720 191
+             722:   67(fvec4)       Load 721
+             723:   27(fvec3)       VectorShuffle 722 722 0 1 2
+             724:   27(fvec3)       Load 247(pos)
+             725:   27(fvec3)       FSub 723 724
+                                    Store 715(a) 725
+             726:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 727 727 12 12
+             731:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 729 728(b) 45
+             732:      7(int)       Load 131(index)
+             733:    138(ptr)       AccessChain 97(params) 137 12
+             734:     69(int)       Load 733
+             735:      7(int)       Bitcast 734
+             736:      7(int)       ISub 732 735
+             737:      7(int)       ISub 736 20
+             738:    217(ptr)       AccessChain 189 191 737 191
+             739:   67(fvec4)       Load 738
+             740:   27(fvec3)       VectorShuffle 739 739 0 1 2
+             741:   27(fvec3)       Load 247(pos)
+             742:   27(fvec3)       FSub 740 741
+                                    Store 728(b) 742
+             743:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 744 744 12 12
+             748:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 746 745(c) 45
+             749:      7(int)       Load 131(index)
+             750:    138(ptr)       AccessChain 97(params) 137 12
+             751:     69(int)       Load 750
+             752:      7(int)       Bitcast 751
+             753:      7(int)       ISub 749 752
+             754:    217(ptr)       AccessChain 189 191 753 191
+             755:   67(fvec4)       Load 754
+             756:   27(fvec3)       VectorShuffle 755 755 0 1 2
+             757:   27(fvec3)       Load 247(pos)
+             758:   27(fvec3)       FSub 756 757
+                                    Store 745(c) 758
+             759:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 760 760 12 12
+             761:   27(fvec3)       Load 715(a)
+             762:   27(fvec3)       Load 728(b)
+             763:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 761 762
+             764:   27(fvec3)       Load 728(b)
+             765:   27(fvec3)       Load 745(c)
+             766:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 764 765
+             767:   27(fvec3)       FAdd 763 766
+             768:   27(fvec3)       Load 691(normal)
+             769:   27(fvec3)       FAdd 768 767
+                                    Store 691(normal) 769
+                                    Branch 711
+             711:                 Label
+             770:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             771:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 772 772 12 12
+             773:    130(ptr)     AccessChain 119(id) 12
+             774:      7(int)     Load 773
+             775:    138(ptr)     AccessChain 97(params) 137 12
+             776:     69(int)     Load 775
+             777:     69(int)     ISub 776 224
+             778:      7(int)     Bitcast 777
+             780:   155(bool)     ULessThan 774 778
+                                  SelectionMerge 782 None
+                                  BranchConditional 780 781 782
+             781:                   Label
+             783:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             784:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 785 785 12 12
+             786:      7(int)       Load 131(index)
+             787:    138(ptr)       AccessChain 97(params) 137 12
+             788:     69(int)       Load 787
+             789:      7(int)       Bitcast 788
+             790:      7(int)       ISub 786 789
+             791:    217(ptr)       AccessChain 189 191 790 191
+             792:   67(fvec4)       Load 791
+             793:   27(fvec3)       VectorShuffle 792 792 0 1 2
+             794:   27(fvec3)       Load 247(pos)
+             795:   27(fvec3)       FSub 793 794
+                                    Store 715(a) 795
+             796:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 797 797 12 12
+             798:      7(int)       Load 131(index)
+             799:    138(ptr)       AccessChain 97(params) 137 12
+             800:     69(int)       Load 799
+             801:      7(int)       Bitcast 800
+             802:      7(int)       ISub 798 801
+             803:      7(int)       IAdd 802 20
+             804:    217(ptr)       AccessChain 189 191 803 191
+             805:   67(fvec4)       Load 804
+             806:   27(fvec3)       VectorShuffle 805 805 0 1 2
+             807:   27(fvec3)       Load 247(pos)
+             808:   27(fvec3)       FSub 806 807
+                                    Store 728(b) 808
+             809:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 810 810 12 12
+             811:      7(int)       Load 131(index)
+             812:      7(int)       IAdd 811 20
+             813:    217(ptr)       AccessChain 189 191 812 191
+             814:   67(fvec4)       Load 813
+             815:   27(fvec3)       VectorShuffle 814 814 0 1 2
+             816:   27(fvec3)       Load 247(pos)
+             817:   27(fvec3)       FSub 815 816
+                                    Store 745(c) 817
+             818:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 819 819 12 12
+             820:   27(fvec3)       Load 715(a)
+             821:   27(fvec3)       Load 728(b)
+             822:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 820 821
+             823:   27(fvec3)       Load 728(b)
+             824:   27(fvec3)       Load 745(c)
+             825:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 823 824
+             826:   27(fvec3)       FAdd 822 825
+             827:   27(fvec3)       Load 691(normal)
+             828:   27(fvec3)       FAdd 827 826
+                                    Store 691(normal) 828
+                                    Branch 782
+             782:                 Label
+                                  Branch 702
+             702:               Label
+             829:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             830:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 831 831 12 12
+             832:    130(ptr)   AccessChain 119(id) 20
+             833:      7(int)   Load 832
+             834:    138(ptr)   AccessChain 97(params) 137 20
+             835:     69(int)   Load 834
+             836:     69(int)   ISub 835 224
+             837:      7(int)   Bitcast 836
+             839:   155(bool)   ULessThan 833 837
+                                SelectionMerge 841 None
+                                BranchConditional 839 840 841
+             840:                 Label
+             842:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             843:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 844 844 12 12
+             845:    130(ptr)     AccessChain 119(id) 12
+             846:      7(int)     Load 845
+             848:   155(bool)     UGreaterThan 846 12
+                                  SelectionMerge 850 None
+                                  BranchConditional 848 849 850
+             849:                   Label
+             851:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             852:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 853 853 12 12
+             854:      7(int)       Load 131(index)
+             855:    138(ptr)       AccessChain 97(params) 137 12
+             856:     69(int)       Load 855
+             857:      7(int)       Bitcast 856
+             858:      7(int)       IAdd 854 857
+             859:    217(ptr)       AccessChain 189 191 858 191
+             860:   67(fvec4)       Load 859
+             861:   27(fvec3)       VectorShuffle 860 860 0 1 2
+             862:   27(fvec3)       Load 247(pos)
+             863:   27(fvec3)       FSub 861 862
+                                    Store 715(a) 863
+             864:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 865 865 12 12
+             866:      7(int)       Load 131(index)
+             867:    138(ptr)       AccessChain 97(params) 137 12
+             868:     69(int)       Load 867
+             869:      7(int)       Bitcast 868
+             870:      7(int)       IAdd 866 869
+             871:      7(int)       ISub 870 20
+             872:    217(ptr)       AccessChain 189 191 871 191
+             873:   67(fvec4)       Load 872
+             874:   27(fvec3)       VectorShuffle 873 873 0 1 2
+             875:   27(fvec3)       Load 247(pos)
+             876:   27(fvec3)       FSub 874 875
+                                    Store 728(b) 876
+             877:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 878 878 12 12
+             879:      7(int)       Load 131(index)
+             880:      7(int)       ISub 879 20
+             881:    217(ptr)       AccessChain 189 191 880 191
+             882:   67(fvec4)       Load 881
+             883:   27(fvec3)       VectorShuffle 882 882 0 1 2
+             884:   27(fvec3)       Load 247(pos)
+             885:   27(fvec3)       FSub 883 884
+                                    Store 745(c) 885
+             886:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 887 887 12 12
+             888:   27(fvec3)       Load 715(a)
+             889:   27(fvec3)       Load 728(b)
+             890:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 888 889
+             891:   27(fvec3)       Load 728(b)
+             892:   27(fvec3)       Load 745(c)
+             893:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 891 892
+             894:   27(fvec3)       FAdd 890 893
+             895:   27(fvec3)       Load 691(normal)
+             896:   27(fvec3)       FAdd 895 894
+                                    Store 691(normal) 896
+                                    Branch 850
+             850:                 Label
+             897:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             898:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 899 899 12 12
+             900:    130(ptr)     AccessChain 119(id) 12
+             901:      7(int)     Load 900
+             902:    138(ptr)     AccessChain 97(params) 137 12
+             903:     69(int)     Load 902
+             904:     69(int)     ISub 903 224
+             905:      7(int)     Bitcast 904
+             907:   155(bool)     ULessThan 901 905
+                                  SelectionMerge 909 None
+                                  BranchConditional 907 908 909
+             908:                   Label
+             910:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             911:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 912 912 12 12
+             913:      7(int)       Load 131(index)
+             914:      7(int)       IAdd 913 20
+             915:    217(ptr)       AccessChain 189 191 914 191
+             916:   67(fvec4)       Load 915
+             917:   27(fvec3)       VectorShuffle 916 916 0 1 2
+             918:   27(fvec3)       Load 247(pos)
+             919:   27(fvec3)       FSub 917 918
+                                    Store 715(a) 919
+             920:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 921 921 12 12
+             922:      7(int)       Load 131(index)
+             923:    138(ptr)       AccessChain 97(params) 137 12
+             924:     69(int)       Load 923
+             925:      7(int)       Bitcast 924
+             926:      7(int)       IAdd 922 925
+             927:      7(int)       IAdd 926 20
+             928:    217(ptr)       AccessChain 189 191 927 191
+             929:   67(fvec4)       Load 928
+             930:   27(fvec3)       VectorShuffle 929 929 0 1 2
+             931:   27(fvec3)       Load 247(pos)
+             932:   27(fvec3)       FSub 930 931
+                                    Store 728(b) 932
+             933:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 934 934 12 12
+             935:      7(int)       Load 131(index)
+             936:    138(ptr)       AccessChain 97(params) 137 12
+             937:     69(int)       Load 936
+             938:      7(int)       Bitcast 937
+             939:      7(int)       IAdd 935 938
+             940:    217(ptr)       AccessChain 189 191 939 191
+             941:   67(fvec4)       Load 940
+             942:   27(fvec3)       VectorShuffle 941 941 0 1 2
+             943:   27(fvec3)       Load 247(pos)
+             944:   27(fvec3)       FSub 942 943
+                                    Store 745(c) 944
+             945:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 946 946 12 12
+             947:   27(fvec3)       Load 715(a)
+             948:   27(fvec3)       Load 728(b)
+             949:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 947 948
+             950:   27(fvec3)       Load 728(b)
+             951:   27(fvec3)       Load 745(c)
+             952:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 950 951
+             953:   27(fvec3)       FAdd 949 952
+             954:   27(fvec3)       Load 691(normal)
+             955:   27(fvec3)       FAdd 954 953
+                                    Store 691(normal) 955
+                                    Branch 909
+             909:                 Label
+                                  Branch 841
+             841:               Label
+             956:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             957:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 958 958 12 12
+             959:      7(int)   Load 131(index)
+             960:   27(fvec3)   Load 691(normal)
+             961:   27(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 960
+             962:   24(float)   CompositeExtract 961 0
+             963:   24(float)   CompositeExtract 961 1
+             964:   24(float)   CompositeExtract 961 2
+             965:   67(fvec4)   CompositeConstruct 962 963 964 225
+             966:    217(ptr)   AccessChain 213 191 959 559
+                                Store 966 965
+                                Branch 687
+             687:             Label
                               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
+                              Line 1 66 50
+36(springForce(vf3;vf3;f1;):   27(fvec3) Function None 31
+          33(p0):     29(ptr) FunctionParameter
+          34(p1):     29(ptr) FunctionParameter
+    35(restDist):     30(ptr) FunctionParameter
+              39:             Label
+        56(dist):     29(ptr) Variable Function
+              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 38
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 42 33(p0) 45
+              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 34(p1) 45
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 35(restDist) 45
+              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 38 36(springForce(vf3;vf3;f1;)
+              53:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 38
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 55 55 12 12
+              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 57 56(dist) 45
+              60:   27(fvec3) Load 33(p0)
+              61:   27(fvec3) Load 34(p1)
+              62:   27(fvec3) FSub 60 61
+                              Store 56(dist) 62
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 64 64 12 12
+              65:   27(fvec3) Load 56(dist)
+              66:   27(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 65
+             102:    101(ptr) AccessChain 97(params) 100
+             103:   24(float) Load 102
+             104:   27(fvec3) VectorTimesScalar 66 103
+             105:   27(fvec3) Load 56(dist)
+             106:   24(float) ExtInst 3(GLSL.std.450) 66(Length) 105
+             107:   24(float) Load 35(restDist)
+             108:   24(float) FSub 106 107
+             109:   27(fvec3) VectorTimesScalar 104 108
+                              ReturnValue 109
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.frag.out b/Test/baseResults/spv.debuginfo.glsl.frag.out
index 22b1731..72777c5 100644
--- a/Test/baseResults/spv.debuginfo.glsl.frag.out
+++ b/Test/baseResults/spv.debuginfo.glsl.frag.out
@@ -1,937 +1,1104 @@
 spv.debuginfo.glsl.frag
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 704
+// Id's are bound by 859
 
                               Capability Shader
                               Capability ImageQuery
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint Fragment 14  "main" 478 533
+                              ExecutionMode 14 OriginUpperLeft
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              25:             String  "float"
+              40:             String  "textureProj"
+              46:             String  "P"
+              50:             String  "layer"
+              53:             String  "offset"
+              60:             String  "filterPCF"
+              66:             String  "sc"
+              78:             String  "shadow"
+              84:             String  "fragcolor"
+              87:             String  "fragpos"
+              93:             String  "int"
+              98:             String  "global_var"
+             113:             String  "shadowCoord"
+             138:             String  "bool"
+             157:             String  "dist"
+             161:             String  "type.2d.image"
+             162:             String  "@type.2d.image"
+             166:             String  "type.sampled.image"
+             167:             String  "@type.sampled.image"
+             171:             String  "samplerShadowMap"
+             221:             String  "texDim"
+             233:             String  "scale"
+             240:             String  "dx"
+             253:             String  "dy"
+             265:             String  "shadowFactor"
+             271:             String  "count"
+             277:             String  "range"
+             284:             String  "x"
+             306:             String  "y"
+             370:             String  "i"
+             390:             String  "shadowClip"
+             397:             String  "color"
+             403:             String  "viewMatrix"
+             406:             String  "Light"
+             412:             String  "lights"
+             415:             String  "debugDisplayTarget"
+             419:             String  "UBO"
+             423:             String  "ubo"
+             466:             String  "fragPos"
+             475:             String  "samplerposition"
+             480:             String  "inUV"
+             488:             String  "normal"
+             492:             String  "samplerNormal"
+             501:             String  "albedo"
+             505:             String  "samplerAlbedo"
+             535:             String  "outFragColor"
+             627:             String  "N"
+             653:             String  "L"
+             677:             String  "V"
+             692:             String  "lightCosInnerAngle"
+             699:             String  "lightCosOuterAngle"
+             706:             String  "lightRange"
+             713:             String  "dir"
+             729:             String  "cosDir"
+             738:             String  "spotEffect"
+             748:             String  "heightAttenuation"
+             757:             String  "NdotL"
+             767:             String  "diff"
+             775:             String  "R"
+             785:             String  "NdotR"
+             795:             String  "spec"
+                              Name 14  "main"
+                              Name 39  "textureProj(vf4;f1;vf2;"
+                              Name 36  "P"
+                              Name 37  "layer"
+                              Name 38  "offset"
+                              Name 59  "filterPCF(vf4;f1;"
+                              Name 57  "sc"
+                              Name 58  "layer"
+                              Name 77  "shadow(vf3;vf3;"
+                              Name 75  "fragcolor"
+                              Name 76  "fragpos"
+                              Name 96  "global_var"
+                              Name 105  "shadow"
+                              Name 111  "shadowCoord"
+                              Name 155  "dist"
+                              Name 169  "samplerShadowMap"
+                              Name 219  "texDim"
+                              Name 231  "scale"
+                              Name 238  "dx"
+                              Name 251  "dy"
+                              Name 263  "shadowFactor"
+                              Name 269  "count"
+                              Name 275  "range"
+                              Name 282  "x"
+                              Name 304  "y"
+                              Name 335  "param"
+                              Name 337  "param"
+                              Name 339  "param"
+                              Name 368  "i"
+                              Name 388  "shadowClip"
+                              Name 395  "Light"
+                              MemberName 395(Light) 0  "position"
+                              MemberName 395(Light) 1  "target"
+                              MemberName 395(Light) 2  "color"
+                              MemberName 395(Light) 3  "viewMatrix"
+                              Name 409  "UBO"
+                              MemberName 409(UBO) 0  "viewPos"
+                              MemberName 409(UBO) 1  "lights"
+                              MemberName 409(UBO) 2  "useShadows"
+                              MemberName 409(UBO) 3  "debugDisplayTarget"
+                              Name 421  "ubo"
+                              Name 436  "shadowFactor"
+                              Name 441  "param"
+                              Name 443  "param"
+                              Name 464  "fragPos"
+                              Name 473  "samplerposition"
+                              Name 478  "inUV"
+                              Name 486  "normal"
+                              Name 490  "samplerNormal"
+                              Name 499  "albedo"
+                              Name 503  "samplerAlbedo"
+                              Name 533  "outFragColor"
+                              Name 537  "param"
+                              Name 538  "param"
+                              Name 616  "fragcolor"
+                              Name 625  "N"
+                              Name 633  "i"
+                              Name 651  "L"
+                              Name 664  "dist"
+                              Name 675  "V"
+                              Name 690  "lightCosInnerAngle"
+                              Name 697  "lightCosOuterAngle"
+                              Name 704  "lightRange"
+                              Name 711  "dir"
+                              Name 727  "cosDir"
+                              Name 736  "spotEffect"
+                              Name 746  "heightAttenuation"
+                              Name 755  "NdotL"
+                              Name 765  "diff"
+                              Name 773  "R"
+                              Name 783  "NdotR"
+                              Name 793  "spec"
+                              Name 846  "param"
+                              Name 848  "param"
+                              Decorate 169(samplerShadowMap) DescriptorSet 0
+                              Decorate 169(samplerShadowMap) Binding 5
+                              MemberDecorate 395(Light) 0 Offset 0
+                              MemberDecorate 395(Light) 1 Offset 16
+                              MemberDecorate 395(Light) 2 Offset 32
+                              MemberDecorate 395(Light) 3 ColMajor
+                              MemberDecorate 395(Light) 3 Offset 48
+                              MemberDecorate 395(Light) 3 MatrixStride 16
+                              Decorate 407 ArrayStride 112
+                              MemberDecorate 409(UBO) 0 Offset 0
+                              MemberDecorate 409(UBO) 1 Offset 16
+                              MemberDecorate 409(UBO) 2 Offset 352
+                              MemberDecorate 409(UBO) 3 Offset 356
+                              Decorate 409(UBO) Block
+                              Decorate 421(ubo) DescriptorSet 0
+                              Decorate 421(ubo) Binding 4
+                              Decorate 473(samplerposition) DescriptorSet 0
+                              Decorate 473(samplerposition) Binding 1
+                              Decorate 478(inUV) Location 0
+                              Decorate 490(samplerNormal) DescriptorSet 0
+                              Decorate 490(samplerNormal) Binding 2
+                              Decorate 503(samplerAlbedo) DescriptorSet 0
+                              Decorate 503(samplerAlbedo) Binding 3
+                              Decorate 533(outFragColor) Location 0
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              24:             TypeFloat 32
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
+              27:             TypeVector 24(float) 4
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
+              29:             TypePointer Function 27(fvec4)
+              30:             TypePointer Function 24(float)
+              31:             TypeVector 24(float) 2
+              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 22
+              33:             TypePointer Function 31(fvec2)
+              34:             TypeFunction 24(float) 29(ptr) 30(ptr) 33(ptr)
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 26 28 26 32
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 40 35 17 12 12 19 40 13 12
+              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 28 17 12 12 41 21 20
+              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 26 17 12 12 41 21 22
+              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 32 17 12 12 41 21 13
+              55:             TypeFunction 24(float) 29(ptr) 30(ptr)
+              56:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 26 28 26
+              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 60 56 17 12 12 19 60 13 12
+              65:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 66 28 17 12 12 61 21 20
+              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 26 17 12 12 61 21 22
+              70:             TypeVector 24(float) 3
+              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
+              72:             TypePointer Function 70(fvec3)
+              73:             TypeFunction 70(fvec3) 72(ptr) 72(ptr)
+              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 71 71 71
+              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 78 74 17 12 12 19 78 13 12
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 71 17 12 12 79 21 20
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 87 71 17 12 12 79 21 22
+              91:      7(int) Constant 41
+              92:             TypeInt 32 1
+              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 93 10 21 12
+              95:             TypePointer Private 92(int)
+  96(global_var):     95(ptr) Variable Private
+              99:      7(int) Constant 8
+              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 98 94 17 91 12 19 98 96(global_var) 99
+             100:     92(int) Constant 0
+             104:      7(int) Constant 61
+             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 78 26 17 104 12 41 21
+             108:   24(float) Constant 1065353216
+             110:      7(int) Constant 62
+             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 113 28 17 110 12 41 21
+             121:      7(int) Constant 63
+             124:   24(float) Constant 1056964608
+             133:      7(int) Constant 65
+             134:             TypeBool
+             137:   24(float) Constant 3212836864
+             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             147:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             154:      7(int) Constant 67
+             156:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 157 26 17 154 12 41 21
+             159:             TypeImage 24(float) 2D array sampled format:Unknown
+             163:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             160:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 161 12 17 154 12 19 162 163 13
+             164:             TypeSampledImage 159
+             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 166 12 17 154 12 19 167 163 13
+             168:             TypePointer UniformConstant 164
+169(samplerShadowMap):    168(ptr) Variable UniformConstant
+             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 171 165 17 154 12 19 171 169(samplerShadowMap) 99
+             184:      7(int) Constant 68
+             187:   24(float) Constant 0
+             188:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             197:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             204:      7(int) Constant 70
+             205:   24(float) Constant 1048576000
+             208:      7(int) Constant 73
+             215:      7(int) Constant 78
+             216:             TypeVector 92(int) 2
+             217:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 94 22
+             218:             TypePointer Function 216(ivec2)
+             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 221 217 17 215 12 61 21
+             225:             TypeVector 92(int) 3
+             226:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 94 13
+             230:      7(int) Constant 79
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 233 26 17 230 12 61 21
+             235:   24(float) Constant 1069547520
+             237:      7(int) Constant 80
+             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 240 26 17 237 12 61 21
+             244:             TypePointer Function 92(int)
+             250:      7(int) Constant 81
+             252:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 253 26 17 250 12 61 21
+             262:      7(int) Constant 83
+             264:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 265 26 17 262 12 61 21
+             268:      7(int) Constant 84
+             270:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 271 94 17 268 12 61 21
+             274:      7(int) Constant 85
+             276:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 277 94 17 274 12 61 21
+             279:     92(int) Constant 1
+             281:      7(int) Constant 87
+             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 284 94 17 281 12 61 21
+             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             303:      7(int) Constant 89
+             305:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 306 94 17 303 12 61 21
+             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             325:      7(int) Constant 91
+             344:      7(int) Constant 92
+             357:      7(int) Constant 96
+             367:      7(int) Constant 100
+             369:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 370 94 17 367 12 79 21
+             382:     92(int) Constant 3
+             383:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             387:      7(int) Constant 102
+             389:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 390 28 17 387 12 79 21
+             392:             TypeMatrix 27(fvec4) 4
+             394:   134(bool) ConstantTrue
+             393:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 28 21 394
+      395(Light):             TypeStruct 27(fvec4) 27(fvec4) 27(fvec4) 392
+             398:      7(int) Constant 47
+             399:      7(int) Constant 7
+             396:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
+             400:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
+             401:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
+             404:      7(int) Constant 48
+             402:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 403 393 17 404 399 12 12 13
+             405:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 406 20 17 387 12 19 406 12 13 396 400 401 402
+             407:             TypeArray 395(Light) 13
+             408:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 405 13
+        409(UBO):             TypeStruct 27(fvec4) 407 92(int) 92(int)
+             410:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
+             413:      7(int) Constant 54
+             411:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 412 408 17 413 99 12 12 13
+             416:      7(int) Constant 56
+             414:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 94 17 416 11 12 12 13
+             417:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 94 17 416 11 12 12 13
+             418:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 419 20 17 387 12 19 419 12 13 410 411 414 417
+             420:             TypePointer Uniform 409(UBO)
+        421(ubo):    420(ptr) Variable Uniform
+             422:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 423 418 17 387 12 19 423 421(ubo) 99
+             425:             TypePointer Uniform 392
+             435:      7(int) Constant 106
+             437:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 265 26 17 435 12 79 21
+             446:      7(int) Constant 111
+             456:      7(int) Constant 113
+             463:      7(int) Constant 119
+             465:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 466 71 17 463 12 16 21
+             468:             TypeImage 24(float) 2D sampled format:Unknown
+             469:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 161 12 17 463 12 19 162 163 13
+             470:             TypeSampledImage 468
+             471:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 166 12 17 463 12 19 167 163 13
+             472:             TypePointer UniformConstant 470
+473(samplerposition):    472(ptr) Variable UniformConstant
+             474:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 475 471 17 463 12 19 475 473(samplerposition) 99
+             477:             TypePointer Input 31(fvec2)
+       478(inUV):    477(ptr) Variable Input
+             479:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 480 32 17 463 12 19 480 478(inUV) 99
+             485:      7(int) Constant 120
+             487:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 488 71 17 485 12 16 21
+490(samplerNormal):    472(ptr) Variable UniformConstant
+             491:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 492 471 17 485 12 19 492 490(samplerNormal) 99
+             498:      7(int) Constant 121
+             500:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 501 28 17 498 12 16 21
+503(samplerAlbedo):    472(ptr) Variable UniformConstant
+             504:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 505 471 17 498 12 19 505 503(samplerAlbedo) 99
+             510:      7(int) Constant 124
+             511:             TypePointer Uniform 92(int)
+             514:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             520:      7(int) Constant 125
+             531:      7(int) Constant 127
+             532:             TypePointer Output 27(fvec4)
+533(outFragColor):    532(ptr) Variable Output
+             534:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 535 28 17 531 12 19 535 533(outFragColor) 99
+             536:   70(fvec3) ConstantComposite 108 108 108
+             541:             TypePointer Output 24(float)
+             549:      7(int) Constant 128
+             553:      7(int) Constant 130
+             562:      7(int) Constant 131
+             566:      7(int) Constant 133
+             575:      7(int) Constant 134
+             579:      7(int) Constant 136
+             589:      7(int) Constant 137
+             593:      7(int) Constant 139
+             603:      7(int) Constant 140
+             608:      7(int) Constant 142
+             611:      7(int) Constant 143
+             615:      7(int) Constant 147
+             617:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 71 17 615 12 16 21
+             621:   24(float) Constant 1036831949
+             624:      7(int) Constant 149
+             626:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 627 71 17 624 12 16 21
+             632:      7(int) Constant 151
+             634:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 370 94 17 632 12 16 21
+             646:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             650:      7(int) Constant 154
+             652:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 653 71 17 650 12 16 21
+             656:             TypePointer Uniform 27(fvec4)
+             663:      7(int) Constant 156
+             665:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 157 26 17 663 12 16 21
+             670:      7(int) Constant 157
+             674:      7(int) Constant 160
+             676:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 677 71 17 674 12 16 21
+             685:      7(int) Constant 161
+             689:      7(int) Constant 163
+             691:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 692 26 17 689 12 16 21
+             694:   24(float) Constant 1064781546
+             696:      7(int) Constant 164
+             698:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 699 26 17 696 12 16 21
+             701:   24(float) Constant 1063781322
+             703:      7(int) Constant 165
+             705:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 706 26 17 703 12 16 21
+             708:   24(float) Constant 1120403456
+             710:      7(int) Constant 168
+             712:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 713 71 17 710 12 16 21
+             726:      7(int) Constant 171
+             728:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 729 26 17 726 12 16 21
+             735:      7(int) Constant 172
+             737:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 738 26 17 735 12 16 21
+             745:      7(int) Constant 173
+             747:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 748 26 17 745 12 16 21
+             754:      7(int) Constant 176
+             756:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 757 26 17 754 12 16 21
+             764:      7(int) Constant 177
+             766:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 767 71 17 764 12 16 21
+             772:      7(int) Constant 180
+             774:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 775 71 17 772 12 16 21
+             782:      7(int) Constant 181
+             784:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 785 26 17 782 12 16 21
+             792:      7(int) Constant 182
+             794:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 795 71 17 792 12 16 21
+             798:   24(float) Constant 1098907648
+             803:   24(float) Constant 1075838976
+             807:      7(int) Constant 184
+             820:     92(int) Constant 2
+             836:      7(int) Constant 188
+             839:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
+             845:      7(int) Constant 190
+             853:      7(int) Constant 193
+                              Line 1 116 11
+        14(main):           4 Function None 5
+              23:             Label
+    464(fragPos):     72(ptr) Variable Function
+     486(normal):     72(ptr) Variable Function
+     499(albedo):     29(ptr) Variable Function
+      537(param):     72(ptr) Variable Function
+      538(param):     72(ptr) Variable Function
+  616(fragcolor):     72(ptr) Variable Function
+          625(N):     72(ptr) Variable Function
+          633(i):    244(ptr) Variable Function
+          651(L):     72(ptr) Variable Function
+       664(dist):     30(ptr) Variable Function
+          675(V):     72(ptr) Variable Function
+690(lightCosInnerAngle):     30(ptr) Variable Function
+697(lightCosOuterAngle):     30(ptr) Variable Function
+ 704(lightRange):     30(ptr) Variable Function
+        711(dir):     72(ptr) Variable Function
+     727(cosDir):     30(ptr) Variable Function
+ 736(spotEffect):     30(ptr) Variable Function
+746(heightAttenuation):     30(ptr) Variable Function
+      755(NdotL):     30(ptr) Variable Function
+       765(diff):     72(ptr) Variable Function
+          773(R):     72(ptr) Variable Function
+      783(NdotR):     30(ptr) Variable Function
+       793(spec):     72(ptr) Variable Function
+      846(param):     72(ptr) Variable Function
+      848(param):     72(ptr) Variable Function
+              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19
+              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 91 91 12 12
+                              Store 96(global_var) 100
+             460:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+             461:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             462:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 463 463 12 12
+             467:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 465 464(fragPos) 48
+             476:         470 Load 473(samplerposition)
+             481:   31(fvec2) Load 478(inUV)
+             482:   27(fvec4) ImageSampleImplicitLod 476 481
+             483:   70(fvec3) VectorShuffle 482 482 0 1 2
+                              Store 464(fragPos) 483
+             484:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 485 485 12 12
+             489:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 487 486(normal) 48
+             493:         470 Load 490(samplerNormal)
+             494:   31(fvec2) Load 478(inUV)
+             495:   27(fvec4) ImageSampleImplicitLod 493 494
+             496:   70(fvec3) VectorShuffle 495 495 0 1 2
+                              Store 486(normal) 496
+             497:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 498 498 12 12
+             502:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 500 499(albedo) 48
+             506:         470 Load 503(samplerAlbedo)
+             507:   31(fvec2) Load 478(inUV)
+             508:   27(fvec4) ImageSampleImplicitLod 506 507
+                              Store 499(albedo) 508
+             509:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 510 510 12 12
+             512:    511(ptr) AccessChain 421(ubo) 382
+             513:     92(int) Load 512
+             515:   134(bool) SGreaterThan 513 100
+                              SelectionMerge 517 None
+                              BranchConditional 515 516 517
+             516:               Label
+             518:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             519:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 520 520 12 12
+             521:    511(ptr)   AccessChain 421(ubo) 382
+             522:     92(int)   Load 521
+                                SelectionMerge 528 None
+                                Switch 522 528 
+                                       case 1: 523
+                                       case 2: 524
+                                       case 3: 525
+                                       case 4: 526
+                                       case 5: 527
+             523:                 Label
+             529:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             530:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 531 531 12 12
+                                  Store 537(param) 536
+             539:   70(fvec3)     Load 464(fragPos)
+                                  Store 538(param) 539
+             540:   70(fvec3)     FunctionCall 77(shadow(vf3;vf3;) 537(param) 538(param)
+             542:    541(ptr)     AccessChain 533(outFragColor) 12
+             543:   24(float)     CompositeExtract 540 0
+                                  Store 542 543
+             544:    541(ptr)     AccessChain 533(outFragColor) 20
+             545:   24(float)     CompositeExtract 540 1
+                                  Store 544 545
+             546:    541(ptr)     AccessChain 533(outFragColor) 22
+             547:   24(float)     CompositeExtract 540 2
+                                  Store 546 547
+             548:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 549 549 12 12
+                                  Branch 528
+             524:                 Label
+             551:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             552:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 553 553 12 12
+             554:   70(fvec3)     Load 464(fragPos)
+             555:    541(ptr)     AccessChain 533(outFragColor) 12
+             556:   24(float)     CompositeExtract 554 0
+                                  Store 555 556
+             557:    541(ptr)     AccessChain 533(outFragColor) 20
+             558:   24(float)     CompositeExtract 554 1
+                                  Store 557 558
+             559:    541(ptr)     AccessChain 533(outFragColor) 22
+             560:   24(float)     CompositeExtract 554 2
+                                  Store 559 560
+             561:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 562 562 12 12
+                                  Branch 528
+             525:                 Label
+             564:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             565:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 566 566 12 12
+             567:   70(fvec3)     Load 486(normal)
+             568:    541(ptr)     AccessChain 533(outFragColor) 12
+             569:   24(float)     CompositeExtract 567 0
+                                  Store 568 569
+             570:    541(ptr)     AccessChain 533(outFragColor) 20
+             571:   24(float)     CompositeExtract 567 1
+                                  Store 570 571
+             572:    541(ptr)     AccessChain 533(outFragColor) 22
+             573:   24(float)     CompositeExtract 567 2
+                                  Store 572 573
+             574:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 575 575 12 12
+                                  Branch 528
+             526:                 Label
+             577:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             578:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 579 579 12 12
+             580:   27(fvec4)     Load 499(albedo)
+             581:   70(fvec3)     VectorShuffle 580 580 0 1 2
+             582:    541(ptr)     AccessChain 533(outFragColor) 12
+             583:   24(float)     CompositeExtract 581 0
+                                  Store 582 583
+             584:    541(ptr)     AccessChain 533(outFragColor) 20
+             585:   24(float)     CompositeExtract 581 1
+                                  Store 584 585
+             586:    541(ptr)     AccessChain 533(outFragColor) 22
+             587:   24(float)     CompositeExtract 581 2
+                                  Store 586 587
+             588:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 589 589 12 12
+                                  Branch 528
+             527:                 Label
+             591:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             592:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 593 593 12 12
+             594:   27(fvec4)     Load 499(albedo)
+             595:   70(fvec3)     VectorShuffle 594 594 3 3 3
+             596:    541(ptr)     AccessChain 533(outFragColor) 12
+             597:   24(float)     CompositeExtract 595 0
+                                  Store 596 597
+             598:    541(ptr)     AccessChain 533(outFragColor) 20
+             599:   24(float)     CompositeExtract 595 1
+                                  Store 598 599
+             600:    541(ptr)     AccessChain 533(outFragColor) 22
+             601:   24(float)     CompositeExtract 595 2
+                                  Store 600 601
+             602:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 603 603 12 12
+                                  Branch 528
+             528:               Label
+             606:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             607:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 608 608 12 12
+             609:    541(ptr)   AccessChain 533(outFragColor) 13
+                                Store 609 108
+             610:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 611 611 12 12
                                 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
+             517:             Label
+             613:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             614:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 615 615 12 12
+             618:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 617 616(fragcolor) 48
+             619:   27(fvec4) Load 499(albedo)
+             620:   70(fvec3) VectorShuffle 619 619 0 1 2
+             622:   70(fvec3) VectorTimesScalar 620 621
+                              Store 616(fragcolor) 622
+             623:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 624 624 12 12
+             628:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 626 625(N) 48
+             629:   70(fvec3) Load 486(normal)
+             630:   70(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 629
+                              Store 625(N) 630
+             631:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
+             635:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 634 633(i) 48
+                              Store 633(i) 100
+                              Branch 636
+             636:             Label
+             640:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             641:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
+                              LoopMerge 638 639 None
+                              Branch 642
+             642:             Label
+             643:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             644:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
+             645:     92(int) Load 633(i)
+             647:   134(bool) SLessThan 645 382
+                              BranchConditional 647 637 638
+             637:               Label
+             648:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             649:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 650 650 12 12
+             654:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 652 651(L) 48
+             655:     92(int)   Load 633(i)
+             657:    656(ptr)   AccessChain 421(ubo) 279 655 100
+             658:   27(fvec4)   Load 657
+             659:   70(fvec3)   VectorShuffle 658 658 0 1 2
+             660:   70(fvec3)   Load 464(fragPos)
+             661:   70(fvec3)   FSub 659 660
+                                Store 651(L) 661
+             662:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 663 663 12 12
+             666:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 665 664(dist) 48
+             667:   70(fvec3)   Load 651(L)
+             668:   24(float)   ExtInst 3(GLSL.std.450) 66(Length) 667
+                                Store 664(dist) 668
+             669:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 670 670 12 12
+             671:   70(fvec3)   Load 651(L)
+             672:   70(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 671
+                                Store 651(L) 672
+             673:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 674 674 12 12
+             678:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 676 675(V) 48
+             679:    656(ptr)   AccessChain 421(ubo) 100
+             680:   27(fvec4)   Load 679
+             681:   70(fvec3)   VectorShuffle 680 680 0 1 2
+             682:   70(fvec3)   Load 464(fragPos)
+             683:   70(fvec3)   FSub 681 682
+                                Store 675(V) 683
+             684:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 685 685 12 12
+             686:   70(fvec3)   Load 675(V)
+             687:   70(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 686
+                                Store 675(V) 687
+             688:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 689 689 12 12
+             693:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 691 690(lightCosInnerAngle) 48
+                                Store 690(lightCosInnerAngle) 694
+             695:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 696 696 12 12
+             700:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 698 697(lightCosOuterAngle) 48
+                                Store 697(lightCosOuterAngle) 701
+             702:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 703 703 12 12
+             707:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 705 704(lightRange) 48
+                                Store 704(lightRange) 708
+             709:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 710 710 12 12
+             714:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 712 711(dir) 48
+             715:     92(int)   Load 633(i)
+             716:    656(ptr)   AccessChain 421(ubo) 279 715 100
+             717:   27(fvec4)   Load 716
+             718:   70(fvec3)   VectorShuffle 717 717 0 1 2
+             719:     92(int)   Load 633(i)
+             720:    656(ptr)   AccessChain 421(ubo) 279 719 279
+             721:   27(fvec4)   Load 720
+             722:   70(fvec3)   VectorShuffle 721 721 0 1 2
+             723:   70(fvec3)   FSub 718 722
+             724:   70(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 723
+                                Store 711(dir) 724
+             725:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 726 726 12 12
+             730:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 728 727(cosDir) 48
+             731:   70(fvec3)   Load 651(L)
+             732:   70(fvec3)   Load 711(dir)
+             733:   24(float)   Dot 731 732
+                                Store 727(cosDir) 733
+             734:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 735 735 12 12
+             739:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 737 736(spotEffect) 48
+             740:   24(float)   Load 697(lightCosOuterAngle)
+             741:   24(float)   Load 690(lightCosInnerAngle)
+             742:   24(float)   Load 727(cosDir)
+             743:   24(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 740 741 742
+                                Store 736(spotEffect) 743
+             744:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 745 745 12 12
+             749:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 747 746(heightAttenuation) 48
+             750:   24(float)   Load 704(lightRange)
+             751:   24(float)   Load 664(dist)
+             752:   24(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 750 187 751
+                                Store 746(heightAttenuation) 752
+             753:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 754 754 12 12
+             758:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 756 755(NdotL) 48
+             759:   70(fvec3)   Load 625(N)
+             760:   70(fvec3)   Load 651(L)
+             761:   24(float)   Dot 759 760
+             762:   24(float)   ExtInst 3(GLSL.std.450) 40(FMax) 187 761
+                                Store 755(NdotL) 762
+             763:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 764 764 12 12
+             768:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 766 765(diff) 48
+             769:   24(float)   Load 755(NdotL)
+             770:   70(fvec3)   CompositeConstruct 769 769 769
+                                Store 765(diff) 770
+             771:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 772 772 12 12
+             776:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 774 773(R) 48
+             777:   70(fvec3)   Load 651(L)
+             778:   70(fvec3)   FNegate 777
+             779:   70(fvec3)   Load 625(N)
+             780:   70(fvec3)   ExtInst 3(GLSL.std.450) 71(Reflect) 778 779
+                                Store 773(R) 780
+             781:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 782 782 12 12
+             786:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 784 783(NdotR) 48
+             787:   70(fvec3)   Load 773(R)
+             788:   70(fvec3)   Load 675(V)
+             789:   24(float)   Dot 787 788
+             790:   24(float)   ExtInst 3(GLSL.std.450) 40(FMax) 187 789
+                                Store 783(NdotR) 790
+             791:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 792 792 12 12
+             796:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 794 793(spec) 48
+             797:   24(float)   Load 783(NdotR)
+             799:   24(float)   ExtInst 3(GLSL.std.450) 26(Pow) 797 798
+             800:     30(ptr)   AccessChain 499(albedo) 13
+             801:   24(float)   Load 800
+             802:   24(float)   FMul 799 801
+             804:   24(float)   FMul 802 803
+             805:   70(fvec3)   CompositeConstruct 804 804 804
+                                Store 793(spec) 805
+             806:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 807 807 12 12
+             808:   70(fvec3)   Load 765(diff)
+             809:   70(fvec3)   Load 793(spec)
+             810:   70(fvec3)   FAdd 808 809
+             811:   24(float)   Load 736(spotEffect)
+             812:   70(fvec3)   VectorTimesScalar 810 811
+             813:   24(float)   Load 746(heightAttenuation)
+             814:   70(fvec3)   VectorTimesScalar 812 813
+             815:   24(float)   CompositeExtract 814 0
+             816:   24(float)   CompositeExtract 814 1
+             817:   24(float)   CompositeExtract 814 2
+             818:   70(fvec3)   CompositeConstruct 815 816 817
+             819:     92(int)   Load 633(i)
+             821:    656(ptr)   AccessChain 421(ubo) 279 819 820
+             822:   27(fvec4)   Load 821
+             823:   70(fvec3)   VectorShuffle 822 822 0 1 2
+             824:   70(fvec3)   FMul 818 823
+             825:   27(fvec4)   Load 499(albedo)
+             826:   70(fvec3)   VectorShuffle 825 825 0 1 2
+             827:   70(fvec3)   FMul 824 826
+             828:   70(fvec3)   Load 616(fragcolor)
+             829:   70(fvec3)   FAdd 828 827
+                                Store 616(fragcolor) 829
+                                Branch 639
+             639:               Label
+             830:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             831:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
+             832:     92(int)   Load 633(i)
+             833:     92(int)   IAdd 832 279
+                                Store 633(i) 833
+                                Branch 636
+             638:             Label
+             834:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             835:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 836 836 12 12
+             837:    511(ptr) AccessChain 421(ubo) 820
+             838:     92(int) Load 837
+             840:   134(bool) SGreaterThan 838 100
+                              SelectionMerge 842 None
+                              BranchConditional 840 841 842
+             841:               Label
+             843:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             844:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 845 845 12 12
+             847:   70(fvec3)   Load 616(fragcolor)
+                                Store 846(param) 847
+             849:   70(fvec3)   Load 464(fragPos)
+                                Store 848(param) 849
+             850:   70(fvec3)   FunctionCall 77(shadow(vf3;vf3;) 846(param) 848(param)
+                                Store 616(fragcolor) 850
+                                Branch 842
+             842:             Label
+             851:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             852:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 853 853 12 12
+             854:   70(fvec3) Load 616(fragcolor)
+             855:   24(float) CompositeExtract 854 0
+             856:   24(float) CompositeExtract 854 1
+             857:   24(float) CompositeExtract 854 2
+             858:   27(fvec4) CompositeConstruct 855 856 857 108
+                              Store 533(outFragColor) 858
                               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
+                              Line 1 59 51
+39(textureProj(vf4;f1;vf2;):   24(float) Function None 34
+           36(P):     29(ptr) FunctionParameter
+       37(layer):     30(ptr) FunctionParameter
+      38(offset):     33(ptr) FunctionParameter
+              42:             Label
+     105(shadow):     30(ptr) Variable Function
+111(shadowCoord):     29(ptr) Variable Function
+       155(dist):     30(ptr) Variable Function
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
+              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 36(P) 48
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 37(layer) 48
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 38(offset) 48
+             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 41 39(textureProj(vf4;f1;vf2;)
+             102:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 104 104 12 12
+             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 106 105(shadow) 48
+                              Store 105(shadow) 108
+             109:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 110 110 12 12
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 112 111(shadowCoord) 48
+             115:   27(fvec4) Load 36(P)
+             116:     30(ptr) AccessChain 36(P) 13
+             117:   24(float) Load 116
+             118:   27(fvec4) CompositeConstruct 117 117 117 117
+             119:   27(fvec4) FDiv 115 118
+                              Store 111(shadowCoord) 119
+             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 121 121 12 12
+             122:   27(fvec4) Load 111(shadowCoord)
+             123:   31(fvec2) VectorShuffle 122 122 0 1
+             125:   31(fvec2) VectorTimesScalar 123 124
+             126:   31(fvec2) CompositeConstruct 124 124
+             127:   31(fvec2) FAdd 125 126
+             128:     30(ptr) AccessChain 111(shadowCoord) 12
+             129:   24(float) CompositeExtract 127 0
+                              Store 128 129
+             130:     30(ptr) AccessChain 111(shadowCoord) 20
+             131:   24(float) CompositeExtract 127 1
+                              Store 130 131
+             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 133 133 12 12
+             135:     30(ptr) AccessChain 111(shadowCoord) 22
+             136:   24(float) Load 135
+             140:   134(bool) FOrdGreaterThan 136 137
+                              SelectionMerge 142 None
+                              BranchConditional 140 141 142
+             141:               Label
+             143:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+             144:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 133 133 12 12
+             145:     30(ptr)   AccessChain 111(shadowCoord) 22
+             146:   24(float)   Load 145
+             148:   134(bool)   FOrdLessThan 146 108
+                                Branch 142
+             142:             Label
+             149:   134(bool) Phi 140 42 148 141
+                              SelectionMerge 151 None
+                              BranchConditional 149 150 151
+             150:               Label
+             152:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+             153:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 154 154 12 12
+             158:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 156 155(dist) 48
+             172:         164   Load 169(samplerShadowMap)
+             173:   27(fvec4)   Load 111(shadowCoord)
+             174:   31(fvec2)   VectorShuffle 173 173 0 1
+             175:   31(fvec2)   Load 38(offset)
+             176:   31(fvec2)   FAdd 174 175
+             177:   24(float)   Load 37(layer)
+             178:   24(float)   CompositeExtract 176 0
+             179:   24(float)   CompositeExtract 176 1
+             180:   70(fvec3)   CompositeConstruct 178 179 177
+             181:   27(fvec4)   ImageSampleImplicitLod 172 180
+             182:   24(float)   CompositeExtract 181 0
+                                Store 155(dist) 182
+             183:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 184 184 12 12
+             185:     30(ptr)   AccessChain 111(shadowCoord) 13
+             186:   24(float)   Load 185
+             189:   134(bool)   FOrdGreaterThan 186 187
+                                SelectionMerge 191 None
+                                BranchConditional 189 190 191
+             190:                 Label
+             192:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+             193:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 184 184 12 12
+             194:   24(float)     Load 155(dist)
+             195:     30(ptr)     AccessChain 111(shadowCoord) 22
+             196:   24(float)     Load 195
+             198:   134(bool)     FOrdLessThan 194 196
+                                  Branch 191
+             191:               Label
+             199:   134(bool)   Phi 189 150 198 190
+                                SelectionMerge 201 None
+                                BranchConditional 199 200 201
+             200:                 Label
+             202:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+             203:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 204 204 12 12
+                                  Store 105(shadow) 205
+                                  Branch 201
+             201:               Label
+                                Branch 151
+             151:             Label
+             206:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
+             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 208 208 12 12
+             209:   24(float) Load 105(shadow)
+                              ReturnValue 209
                               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
+                              Line 1 76 37
+59(filterPCF(vf4;f1;):   24(float) Function None 55
+          57(sc):     29(ptr) FunctionParameter
+       58(layer):     30(ptr) FunctionParameter
+              62:             Label
+     219(texDim):    218(ptr) Variable Function
+      231(scale):     30(ptr) Variable Function
+         238(dx):     30(ptr) Variable Function
+         251(dy):     30(ptr) Variable Function
+263(shadowFactor):     30(ptr) Variable Function
+      269(count):    244(ptr) Variable Function
+      275(range):    244(ptr) Variable Function
+          282(x):    244(ptr) Variable Function
+          304(y):    244(ptr) Variable Function
+      335(param):     29(ptr) Variable Function
+      337(param):     30(ptr) Variable Function
+      339(param):     33(ptr) Variable Function
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 65 57(sc) 48
+              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 68 58(layer) 48
+             212:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 61 59(filterPCF(vf4;f1;)
+             213:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 215 215 12 12
+             222:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 220 219(texDim) 48
+             223:         164 Load 169(samplerShadowMap)
+             224:         159 Image 223
+             227:  225(ivec3) ImageQuerySizeLod 224 100
+             228:  216(ivec2) VectorShuffle 227 227 0 1
+                              Store 219(texDim) 228
+             229:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 230 230 12 12
+             234:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 232 231(scale) 48
+                              Store 231(scale) 235
+             236:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 237 237 12 12
+             241:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 239 238(dx) 48
+             242:   24(float) Load 231(scale)
+             243:   24(float) FMul 242 108
+             245:    244(ptr) AccessChain 219(texDim) 12
+             246:     92(int) Load 245
+             247:   24(float) ConvertSToF 246
+             248:   24(float) FDiv 243 247
+                              Store 238(dx) 248
+             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 250 250 12 12
+             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 252 251(dy) 48
+             255:   24(float) Load 231(scale)
+             256:   24(float) FMul 255 108
+             257:    244(ptr) AccessChain 219(texDim) 20
+             258:     92(int) Load 257
+             259:   24(float) ConvertSToF 258
+             260:   24(float) FDiv 256 259
+                              Store 251(dy) 260
+             261:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 262 262 12 12
+             266:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 264 263(shadowFactor) 48
+                              Store 263(shadowFactor) 187
+             267:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 268 268 12 12
+             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 270 269(count) 48
+                              Store 269(count) 100
+             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 274 274 12 12
+             278:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 276 275(range) 48
+                              Store 275(range) 279
+             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
+             285:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 283 282(x) 48
+             286:     92(int) Load 275(range)
+             287:     92(int) SNegate 286
+                              Store 282(x) 287
+                              Branch 288
+             288:             Label
+             292:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             293:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
+                              LoopMerge 290 291 None
+                              Branch 294
+             294:             Label
+             295:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             296:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
+             297:     92(int) Load 282(x)
+             298:     92(int) Load 275(range)
+             300:   134(bool) SLessThanEqual 297 298
+                              BranchConditional 300 289 290
+             289:               Label
+             301:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             302:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
+             307:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 305 304(y) 48
+             308:     92(int)   Load 275(range)
+             309:     92(int)   SNegate 308
+                                Store 304(y) 309
                                 Branch 310
-             312:             Label
-             381:   69(fvec3) Load 74(fragcolor)
-                              ReturnValue 381
+             310:               Label
+             314:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             315:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
+                                LoopMerge 312 313 None
+                                Branch 316
+             316:               Label
+             317:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             318:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
+             319:     92(int)   Load 304(y)
+             320:     92(int)   Load 275(range)
+             322:   134(bool)   SLessThanEqual 319 320
+                                BranchConditional 322 311 312
+             311:                 Label
+             323:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             324:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 325 325 12 12
+             326:   24(float)     Load 238(dx)
+             327:     92(int)     Load 282(x)
+             328:   24(float)     ConvertSToF 327
+             329:   24(float)     FMul 326 328
+             330:   24(float)     Load 251(dy)
+             331:     92(int)     Load 304(y)
+             332:   24(float)     ConvertSToF 331
+             333:   24(float)     FMul 330 332
+             334:   31(fvec2)     CompositeConstruct 329 333
+             336:   27(fvec4)     Load 57(sc)
+                                  Store 335(param) 336
+             338:   24(float)     Load 58(layer)
+                                  Store 337(param) 338
+                                  Store 339(param) 334
+             340:   24(float)     FunctionCall 39(textureProj(vf4;f1;vf2;) 335(param) 337(param) 339(param)
+             341:   24(float)     Load 263(shadowFactor)
+             342:   24(float)     FAdd 341 340
+                                  Store 263(shadowFactor) 342
+             343:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 344 344 12 12
+             345:     92(int)     Load 269(count)
+             346:     92(int)     IAdd 345 279
+                                  Store 269(count) 346
+                                  Branch 313
+             313:                 Label
+             347:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             348:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
+             349:     92(int)     Load 304(y)
+             350:     92(int)     IAdd 349 279
+                                  Store 304(y) 350
+                                  Branch 310
+             312:               Label
+                                Branch 291
+             291:               Label
+             351:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             352:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
+             353:     92(int)   Load 282(x)
+             354:     92(int)   IAdd 353 279
+                                Store 282(x) 354
+                                Branch 288
+             290:             Label
+             355:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
+             356:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 357 357 12 12
+             358:   24(float) Load 263(shadowFactor)
+             359:     92(int) Load 269(count)
+             360:   24(float) ConvertSToF 359
+             361:   24(float) FDiv 358 360
+                              ReturnValue 361
+                              FunctionEnd
+                              Line 1 99 41
+77(shadow(vf3;vf3;):   70(fvec3) Function None 73
+   75(fragcolor):     72(ptr) FunctionParameter
+     76(fragpos):     72(ptr) FunctionParameter
+              80:             Label
+          368(i):    244(ptr) Variable Function
+ 388(shadowClip):     29(ptr) Variable Function
+436(shadowFactor):     30(ptr) Variable Function
+      441(param):     29(ptr) Variable Function
+      443(param):     30(ptr) Variable Function
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
+              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 83 75(fragcolor) 48
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 86 76(fragpos) 48
+             364:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 79 77(shadow(vf3;vf3;)
+             365:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+             366:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
+             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 369 368(i) 48
+                              Store 368(i) 100
+                              Branch 372
+             372:             Label
+             376:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+             377:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
+                              LoopMerge 374 375 None
+                              Branch 378
+             378:             Label
+             379:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+             380:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
+             381:     92(int) Load 368(i)
+             384:   134(bool) SLessThan 381 382
+                              BranchConditional 384 373 374
+             373:               Label
+             385:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+             386:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 387 387 12 12
+             391:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 389 388(shadowClip) 48
+             424:     92(int)   Load 368(i)
+             426:    425(ptr)   AccessChain 421(ubo) 279 424 382
+             427:         392   Load 426
+             428:   70(fvec3)   Load 76(fragpos)
+             429:   24(float)   CompositeExtract 428 0
+             430:   24(float)   CompositeExtract 428 1
+             431:   24(float)   CompositeExtract 428 2
+             432:   27(fvec4)   CompositeConstruct 429 430 431 108
+             433:   27(fvec4)   MatrixTimesVector 427 432
+                                Store 388(shadowClip) 433
+             434:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 435 435 12 12
+             438:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 437 436(shadowFactor) 48
+             439:     92(int)   Load 368(i)
+             440:   24(float)   ConvertSToF 439
+             442:   27(fvec4)   Load 388(shadowClip)
+                                Store 441(param) 442
+                                Store 443(param) 440
+             444:   24(float)   FunctionCall 59(filterPCF(vf4;f1;) 441(param) 443(param)
+                                Store 436(shadowFactor) 444
+             445:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 446 446 12 12
+             447:   24(float)   Load 436(shadowFactor)
+             448:   70(fvec3)   Load 75(fragcolor)
+             449:   70(fvec3)   VectorTimesScalar 448 447
+                                Store 75(fragcolor) 449
+                                Branch 375
+             375:               Label
+             450:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+             451:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
+             452:     92(int)   Load 368(i)
+             453:     92(int)   IAdd 452 279
+                                Store 368(i) 453
+                                Branch 372
+             374:             Label
+             454:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
+             455:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 456 456 12 12
+             457:   70(fvec3) Load 75(fragcolor)
+                              ReturnValue 457
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.geom.out b/Test/baseResults/spv.debuginfo.glsl.geom.out
index 07f8f52..58edd36 100644
--- a/Test/baseResults/spv.debuginfo.glsl.geom.out
+++ b/Test/baseResults/spv.debuginfo.glsl.geom.out
@@ -1,332 +1,364 @@
 spv.debuginfo.glsl.geom
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 231
+// Id's are bound by 256
 
                               Capability Geometry
                               Capability MultiViewport
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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"
+                              EntryPoint Geometry 14  "main" 62 94 113 123 126 157 196 205 222 234 240 243
+                              ExecutionMode 14 Triangles
+                              ExecutionMode 14 Invocations 2
+                              ExecutionMode 14 OutputTriangleStrip
+                              ExecutionMode 14 OutputVertices 3
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              29:             String  "int"
+              34:             String  "i"
+              50:             String  "bool"
+              57:             String  "float"
+              64:             String  "outNormal"
+              77:             String  "projection"
+              81:             String  "modelview"
+              84:             String  "lightPos"
+              87:             String  "UBO"
+              91:             String  "ubo"
+              96:             String  "gl_InvocationID"
+             115:             String  "inNormal"
+             125:             String  "outColor"
+             128:             String  "inColor"
+             137:             String  "pos"
+             143:             String  "gl_Position"
+             146:             String  "gl_PointSize"
+             149:             String  "gl_CullDistance"
+             153:             String  "gl_PerVertex"
+             159:             String  "gl_in"
+             168:             String  "worldPos"
+             180:             String  "lPos"
+             198:             String  "outLightVec"
+             207:             String  "outViewVec"
+             236:             String  "gl_ViewportIndex"
+             242:             String  "gl_PrimitiveID"
+             245:             String  "gl_PrimitiveIDIn"
                               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
+                              Name 14  "main"
+                              Name 32  "i"
+                              Name 62  "outNormal"
+                              Name 75  "UBO"
+                              MemberName 75(UBO) 0  "projection"
+                              MemberName 75(UBO) 1  "modelview"
+                              MemberName 75(UBO) 2  "lightPos"
+                              Name 89  "ubo"
+                              Name 94  "gl_InvocationID"
+                              Name 113  "inNormal"
+                              Name 123  "outColor"
+                              Name 126  "inColor"
+                              Name 135  "pos"
+                              Name 141  "gl_PerVertex"
+                              MemberName 141(gl_PerVertex) 0  "gl_Position"
+                              MemberName 141(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 141(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 141(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 157  "gl_in"
+                              Name 166  "worldPos"
+                              Name 178  "lPos"
+                              Name 196  "outLightVec"
+                              Name 205  "outViewVec"
+                              Name 213  "gl_PerVertex"
+                              MemberName 213(gl_PerVertex) 0  "gl_Position"
+                              MemberName 213(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 213(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 213(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 222  ""
+                              Name 234  "gl_ViewportIndex"
+                              Name 240  "gl_PrimitiveID"
+                              Name 243  "gl_PrimitiveIDIn"
+                              Decorate 62(outNormal) Location 0
+                              Decorate 71 ArrayStride 64
+                              Decorate 73 ArrayStride 64
+                              MemberDecorate 75(UBO) 0 ColMajor
+                              MemberDecorate 75(UBO) 0 Offset 0
+                              MemberDecorate 75(UBO) 0 MatrixStride 16
+                              MemberDecorate 75(UBO) 1 ColMajor
+                              MemberDecorate 75(UBO) 1 Offset 128
+                              MemberDecorate 75(UBO) 1 MatrixStride 16
+                              MemberDecorate 75(UBO) 2 Offset 256
+                              Decorate 75(UBO) Block
+                              Decorate 89(ubo) DescriptorSet 0
+                              Decorate 89(ubo) Binding 0
+                              Decorate 94(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 113(inNormal) Location 0
+                              Decorate 123(outColor) Location 1
+                              Decorate 126(inColor) Location 1
+                              MemberDecorate 141(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 141(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 141(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 141(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 141(gl_PerVertex) Block
+                              Decorate 196(outLightVec) Location 3
+                              Decorate 205(outViewVec) Location 2
+                              MemberDecorate 213(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 213(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 213(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 213(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 213(gl_PerVertex) Block
+                              Decorate 234(gl_ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 240(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 243(gl_PrimitiveIDIn) BuiltIn PrimitiveId
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              27:      7(int) Constant 49
+              28:             TypeInt 32 1
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 21 12
+              31:             TypePointer Function 28(int)
+              33:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 34 30 17 27 12 16 21
+              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              37:     28(int) Constant 0
+              48:     28(int) Constant 3
+              49:             TypeBool
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 50 10 22 12
+              55:      7(int) Constant 51
+              56:             TypeFloat 32
+              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 57 10 13 12
+              59:             TypeVector 56(float) 3
+              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 58 13
+              61:             TypePointer Output 59(fvec3)
+   62(outNormal):     61(ptr) Variable Output
+              65:      7(int) Constant 8
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 64 60 17 55 12 19 64 62(outNormal) 65
+              66:             TypeVector 56(float) 4
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 58 21
+              68:             TypeMatrix 66(fvec4) 4
+              70:    49(bool) ConstantTrue
+              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 67 21 70
+              71:             TypeArray 68 22
+              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 69 22
+              73:             TypeArray 68 22
+              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 69 22
+         75(UBO):             TypeStruct 71 73 66(fvec4)
+              78:      7(int) Constant 34
+              79:      7(int) Constant 7
+              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 77 72 17 78 79 12 12 13
+              82:      7(int) Constant 35
+              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 81 74 17 82 79 12 12 13
+              85:      7(int) Constant 36
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 84 67 17 85 79 12 12 13
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 87 20 17 55 12 19 87 12 13 76 80 83
+              88:             TypePointer Uniform 75(UBO)
+         89(ubo):     88(ptr) Variable Uniform
+              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 91 86 17 55 12 19 91 89(ubo) 65
+              92:     28(int) Constant 1
+              93:             TypePointer Input 28(int)
+94(gl_InvocationID):     93(ptr) Variable Input
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 96 30 17 55 12 19 96 94(gl_InvocationID) 65
+              98:             TypePointer Uniform 68
+             101:             TypeMatrix 59(fvec3) 3
+             102:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 60 13 70
+             110:             TypeArray 59(fvec3) 13
+             111:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 60 13
+             112:             TypePointer Input 110
+   113(inNormal):    112(ptr) Variable Input
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 115 111 17 55 12 19 115 113(inNormal) 65
+             117:             TypePointer Input 59(fvec3)
+             122:      7(int) Constant 52
+   123(outColor):     61(ptr) Variable Output
+             124:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 125 60 17 122 12 19 125 123(outColor) 65
+    126(inColor):    112(ptr) Variable Input
+             127:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 128 111 17 122 12 19 128 126(inColor) 65
+             133:      7(int) Constant 54
+             134:             TypePointer Function 66(fvec4)
+             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 137 67 17 133 12 16 21
+             139:             TypeArray 56(float) 20
+             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 58 20
+141(gl_PerVertex):             TypeStruct 66(fvec4) 56(float) 139 139
+             144:      7(int) Constant 23
+             142:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 143 67 17 22 144 12 12 13
+             147:      7(int) Constant 41
+             145:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 146 58 17 22 147 12 12 13
+             150:      7(int) Constant 84
+             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 22 150 12 12 13
+             151:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 22 150 12 12 13
+             152:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 153 20 17 133 12 19 153 12 13 142 145 148 151
+             154:             TypeArray 141(gl_PerVertex) 13
+             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 152 13
+             156:             TypePointer Input 154
+      157(gl_in):    156(ptr) Variable Input
+             158:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 159 155 17 133 12 19 159 157(gl_in) 65
+             161:             TypePointer Input 66(fvec4)
+             165:      7(int) Constant 55
+             167:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 168 67 17 165 12 16 21
+             176:      7(int) Constant 57
+             177:             TypePointer Function 59(fvec3)
+             179:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 180 60 17 176 12 16 21
+             185:     28(int) Constant 2
+             186:             TypePointer Uniform 66(fvec4)
+             195:      7(int) Constant 58
+196(outLightVec):     61(ptr) Variable Output
+             197:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 198 60 17 195 12 19 198 196(outLightVec) 65
+             204:      7(int) Constant 59
+ 205(outViewVec):     61(ptr) Variable Output
+             206:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 207 60 17 204 12 19 207 205(outViewVec) 65
+             212:      7(int) Constant 61
+213(gl_PerVertex):             TypeStruct 66(fvec4) 56(float) 139 139
+             215:      7(int) Constant 215
+             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 143 67 17 22 215 12 12 13
+             217:      7(int) Constant 233
+             216:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 146 58 17 22 217 12 12 13
+             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 13 79 12 12 13
+             219:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 13 79 12 12 13
+             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 153 20 17 212 12 19 153 12 13 214 216 218 219
+             221:             TypePointer Output 213(gl_PerVertex)
+             222:    221(ptr) Variable Output
+             223:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 220 17 212 12 19 1 222 65
+             229:             TypePointer Output 66(fvec4)
+             232:      7(int) Constant 64
+             233:             TypePointer Output 28(int)
+234(gl_ViewportIndex):    233(ptr) Variable Output
+             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 236 30 17 232 12 19 236 234(gl_ViewportIndex) 65
+             239:      7(int) Constant 65
+240(gl_PrimitiveID):    233(ptr) Variable Output
+             241:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 242 30 17 239 12 19 242 240(gl_PrimitiveID) 65
+243(gl_PrimitiveIDIn):     93(ptr) Variable Input
+             244:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 245 30 17 239 12 19 245 243(gl_PrimitiveIDIn) 65
+             248:      7(int) Constant 66
+             255:      7(int) Constant 68
+                              Line 1 47 15
+        14(main):           4 Function None 5
+              23:             Label
+           32(i):     31(ptr) Variable Function
+        135(pos):    134(ptr) Variable Function
+   166(worldPos):    134(ptr) Variable Function
+       178(lPos):    177(ptr) Variable Function
+              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 33 32(i) 36
+                              Store 32(i) 37
+                              Branch 38
+              38:             Label
+              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
+                              LoopMerge 40 41 None
+                              Branch 44
+              44:             Label
+              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
+              47:     28(int) Load 32(i)
+              52:    49(bool) SLessThan 47 48
+                              BranchConditional 52 39 40
+              39:               Label
+              53:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              54:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 55 55 12 12
+              97:     28(int)   Load 94(gl_InvocationID)
+              99:     98(ptr)   AccessChain 89(ubo) 92 97
+             100:          68   Load 99
+             103:   66(fvec4)   CompositeExtract 100 0
+             104:   59(fvec3)   VectorShuffle 103 103 0 1 2
+             105:   66(fvec4)   CompositeExtract 100 1
+             106:   59(fvec3)   VectorShuffle 105 105 0 1 2
+             107:   66(fvec4)   CompositeExtract 100 2
+             108:   59(fvec3)   VectorShuffle 107 107 0 1 2
+             109:         101   CompositeConstruct 104 106 108
+             116:     28(int)   Load 32(i)
+             118:    117(ptr)   AccessChain 113(inNormal) 116
+             119:   59(fvec3)   Load 118
+             120:   59(fvec3)   MatrixTimesVector 109 119
+                                Store 62(outNormal) 120
+             121:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 122 122 12 12
+             129:     28(int)   Load 32(i)
+             130:    117(ptr)   AccessChain 126(inColor) 129
+             131:   59(fvec3)   Load 130
+                                Store 123(outColor) 131
+             132:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 133 133 12 12
+             138:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 136 135(pos) 36
+             160:     28(int)   Load 32(i)
+             162:    161(ptr)   AccessChain 157(gl_in) 160 37
+             163:   66(fvec4)   Load 162
+                                Store 135(pos) 163
+             164:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 165 165 12 12
+             169:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 167 166(worldPos) 36
+             170:     28(int)   Load 94(gl_InvocationID)
+             171:     98(ptr)   AccessChain 89(ubo) 92 170
+             172:          68   Load 171
+             173:   66(fvec4)   Load 135(pos)
+             174:   66(fvec4)   MatrixTimesVector 172 173
+                                Store 166(worldPos) 174
+             175:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 176 176 12 12
+             181:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 179 178(lPos) 36
+             182:     28(int)   Load 94(gl_InvocationID)
+             183:     98(ptr)   AccessChain 89(ubo) 92 182
+             184:          68   Load 183
+             187:    186(ptr)   AccessChain 89(ubo) 185
+             188:   66(fvec4)   Load 187
+             189:   66(fvec4)   MatrixTimesVector 184 188
+             190:   56(float)   CompositeExtract 189 0
+             191:   56(float)   CompositeExtract 189 1
+             192:   56(float)   CompositeExtract 189 2
+             193:   59(fvec3)   CompositeConstruct 190 191 192
+                                Store 178(lPos) 193
+             194:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 195 195 12 12
+             199:   59(fvec3)   Load 178(lPos)
+             200:   66(fvec4)   Load 166(worldPos)
+             201:   59(fvec3)   VectorShuffle 200 200 0 1 2
+             202:   59(fvec3)   FSub 199 201
+                                Store 196(outLightVec) 202
+             203:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 204 204 12 12
+             208:   66(fvec4)   Load 166(worldPos)
+             209:   59(fvec3)   VectorShuffle 208 208 0 1 2
+             210:   59(fvec3)   FNegate 209
+                                Store 205(outViewVec) 210
+             211:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 212 212 12 12
+             224:     28(int)   Load 94(gl_InvocationID)
+             225:     98(ptr)   AccessChain 89(ubo) 37 224
+             226:          68   Load 225
+             227:   66(fvec4)   Load 166(worldPos)
+             228:   66(fvec4)   MatrixTimesVector 226 227
+             230:    229(ptr)   AccessChain 222 37
+                                Store 230 228
+             231:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 232 232 12 12
+             237:     28(int)   Load 94(gl_InvocationID)
+                                Store 234(gl_ViewportIndex) 237
+             238:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 239 239 12 12
+             246:     28(int)   Load 243(gl_PrimitiveIDIn)
+                                Store 240(gl_PrimitiveID) 246
+             247:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 248 248 12 12
                                 EmitVertex
+                                Branch 41
+              41:               Label
+             249:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             250:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
+             251:     28(int)   Load 32(i)
+             252:     28(int)   IAdd 251 92
+                                Store 32(i) 252
                                 Branch 38
-              38:               Label
-             229:     24(int)   Load 28(i)
-             230:     24(int)   IAdd 229 83
-                                Store 28(i) 230
-                                Branch 35
-              37:             Label
+              40:             Label
+             253:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 255 255 12 12
                               EndPrimitive
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.tesc.out b/Test/baseResults/spv.debuginfo.glsl.tesc.out
index ae9bfad..f3e7d20 100644
--- a/Test/baseResults/spv.debuginfo.glsl.tesc.out
+++ b/Test/baseResults/spv.debuginfo.glsl.tesc.out
@@ -1,619 +1,713 @@
 spv.debuginfo.glsl.tesc
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 457
+// Id's are bound by 542
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint TessellationControl 14  "main" 249 253 279 370 383 498 512 519 533
+                              ExecutionMode 14 OutputVertices 4
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              25:             String  "float"
+              35:             String  "screenSpaceTessFactor"
+              41:             String  "p0"
+              45:             String  "p1"
+              48:             String  "bool"
+              53:             String  "frustumCheck"
+              62:             String  "midPoint"
+              74:             String  "radius"
+              85:             String  "v0"
+              96:             String  "modelview"
+             101:             String  "lightPos"
+             104:             String  "frustumPlanes"
+             106:             String  "tessellatedEdgeSize"
+             111:             String  "viewportDim"
+             115:             String  "UBO"
+             119:             String  "ubo"
+             121:             String  "int"
+             133:             String  "clip0"
+             154:             String  "clip1"
+             229:             String  "pos"
+             235:             String  "gl_Position"
+             238:             String  "gl_PointSize"
+             241:             String  "gl_CullDistance"
+             245:             String  "gl_PerVertex"
+             251:             String  "gl_in"
+             255:             String  "gl_InvocationID"
+             264:             String  "type.2d.image"
+             265:             String  "@type.2d.image"
+             269:             String  "type.sampled.image"
+             270:             String  "@type.sampled.image"
+             274:             String  "samplerHeight"
+             281:             String  "inUV"
+             300:             String  "i"
+             372:             String  "gl_TessLevelInner"
+             385:             String  "gl_TessLevelOuter"
+             500:             String  "gl_out"
+             514:             String  "outNormal"
+             521:             String  "inNormal"
+             535:             String  "outUV"
+                              Name 14  "main"
+                              Name 34  "screenSpaceTessFactor(vf4;vf4;"
+                              Name 32  "p0"
+                              Name 33  "p1"
+                              Name 52  "frustumCheck("
+                              Name 60  "midPoint"
+                              Name 72  "radius"
+                              Name 83  "v0"
+                              Name 94  "UBO"
+                              MemberName 94(UBO) 0  "projection"
+                              MemberName 94(UBO) 1  "modelview"
+                              MemberName 94(UBO) 2  "lightPos"
+                              MemberName 94(UBO) 3  "frustumPlanes"
+                              MemberName 94(UBO) 4  "displacementFactor"
+                              MemberName 94(UBO) 5  "tessellationFactor"
+                              MemberName 94(UBO) 6  "viewportDim"
+                              MemberName 94(UBO) 7  "tessellatedEdgeSize"
+                              Name 117  "ubo"
+                              Name 131  "clip0"
+                              Name 152  "clip1"
+                              Name 227  "pos"
+                              Name 233  "gl_PerVertex"
+                              MemberName 233(gl_PerVertex) 0  "gl_Position"
+                              MemberName 233(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 233(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 233(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 249  "gl_in"
+                              Name 253  "gl_InvocationID"
+                              Name 272  "samplerHeight"
+                              Name 279  "inUV"
+                              Name 298  "i"
+                              Name 370  "gl_TessLevelInner"
+                              Name 383  "gl_TessLevelOuter"
+                              Name 410  "param"
+                              Name 413  "param"
+                              Name 420  "param"
+                              Name 423  "param"
+                              Name 430  "param"
+                              Name 433  "param"
+                              Name 440  "param"
+                              Name 443  "param"
+                              Name 487  "gl_PerVertex"
+                              MemberName 487(gl_PerVertex) 0  "gl_Position"
+                              MemberName 487(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 487(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 487(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 498  "gl_out"
+                              Name 512  "outNormal"
+                              Name 519  "inNormal"
+                              Name 533  "outUV"
+                              Decorate 90 ArrayStride 16
+                              MemberDecorate 94(UBO) 0 ColMajor
+                              MemberDecorate 94(UBO) 0 Offset 0
+                              MemberDecorate 94(UBO) 0 MatrixStride 16
+                              MemberDecorate 94(UBO) 1 ColMajor
+                              MemberDecorate 94(UBO) 1 Offset 64
+                              MemberDecorate 94(UBO) 1 MatrixStride 16
+                              MemberDecorate 94(UBO) 2 Offset 128
+                              MemberDecorate 94(UBO) 3 Offset 144
+                              MemberDecorate 94(UBO) 4 Offset 240
+                              MemberDecorate 94(UBO) 5 Offset 244
+                              MemberDecorate 94(UBO) 6 Offset 248
+                              MemberDecorate 94(UBO) 7 Offset 256
+                              Decorate 94(UBO) Block
+                              Decorate 117(ubo) DescriptorSet 0
+                              Decorate 117(ubo) Binding 0
+                              MemberDecorate 233(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 233(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 233(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 233(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 233(gl_PerVertex) Block
+                              Decorate 253(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 272(samplerHeight) DescriptorSet 0
+                              Decorate 272(samplerHeight) Binding 1
+                              Decorate 279(inUV) Location 1
+                              Decorate 370(gl_TessLevelInner) Patch
+                              Decorate 370(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 383(gl_TessLevelOuter) Patch
+                              Decorate 383(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              MemberDecorate 487(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 487(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 487(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 487(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 487(gl_PerVertex) Block
+                              Decorate 512(outNormal) Location 0
+                              Decorate 519(inNormal) Location 0
+                              Decorate 533(outUV) Location 1
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              24:             TypeFloat 32
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
+              27:             TypeVector 24(float) 4
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
+              29:             TypePointer Function 27(fvec4)
+              30:             TypeFunction 24(float) 29(ptr) 29(ptr)
+              31:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 26 28 28
+              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 35 31 17 12 12 19 35 13 12
+              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 41 28 17 12 12 36 21 20
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 45 28 17 12 12 36 21 22
+              47:             TypeBool
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+              50:             TypeFunction 47(bool)
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 49
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 53 51 17 12 12 19 53 13 12
+              59:      7(int) Constant 54
+              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 62 28 17 59 12 36 21
+              64:   24(float) Constant 1056964608
+              70:      7(int) Constant 56
+              71:             TypePointer Function 24(float)
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 74 26 17 70 12 36 21
+              79:   24(float) Constant 1073741824
+              82:      7(int) Constant 59
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 85 28 17 82 12 36 21
+              87:             TypeMatrix 27(fvec4) 4
+              89:    47(bool) ConstantTrue
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 28 21 89
+              90:             TypeArray 27(fvec4) 11
+              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 28 11
+              92:             TypeVector 24(float) 2
+              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 22
+         94(UBO):             TypeStruct 87 87 27(fvec4) 90 24(float) 24(float) 92(fvec2) 24(float)
+              97:      7(int) Constant 30
+              98:      7(int) Constant 7
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 88 17 97 98 12 12 13
+              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 88 17 97 98 12 12 13
+             102:      7(int) Constant 31
+             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 101 28 17 102 98 12 12 13
+             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 104 91 17 10 98 12 12 13
+             107:      7(int) Constant 36
+             108:      7(int) Constant 8
+             105:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 106 26 17 107 108 12 12 13
+             109:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 106 26 17 107 108 12 12 13
+             112:      7(int) Constant 35
+             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 111 93 17 112 98 12 12 13
+             113:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 106 26 17 107 108 12 12 13
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 115 20 17 82 12 19 115 12 13 95 99 100 103 105 109 110 113
+             116:             TypePointer Uniform 94(UBO)
+        117(ubo):    116(ptr) Variable Uniform
+             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 119 114 17 82 12 19 119 117(ubo) 108
+             120:             TypeInt 32 1
+             122:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 121 10 21 12
+             123:    120(int) Constant 1
+             124:             TypePointer Uniform 87
+             130:      7(int) Constant 62
+             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 133 28 17 130 12 36 21
+             135:    120(int) Constant 0
+             140:             TypeVector 24(float) 3
+             141:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
+             142:   24(float) Constant 0
+             143:  140(fvec3) ConstantComposite 142 142 142
+             151:      7(int) Constant 63
+             153:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 154 28 17 151 12 36 21
+             167:      7(int) Constant 66
+             174:      7(int) Constant 67
+             181:      7(int) Constant 70
+             182:    120(int) Constant 6
+             183:             TypePointer Uniform 92(fvec2)
+             194:      7(int) Constant 71
+             205:      7(int) Constant 76
+             209:    120(int) Constant 7
+             210:             TypePointer Uniform 24(float)
+             214:    120(int) Constant 5
+             218:   24(float) Constant 1065353216
+             219:   24(float) Constant 1115684864
+             226:      7(int) Constant 85
+             228:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 229 28 17 226 12 54 21
+             231:             TypeArray 24(float) 20
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 26 20
+233(gl_PerVertex):             TypeStruct 27(fvec4) 24(float) 231 231
+             236:      7(int) Constant 1756
+             234:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 28 17 20 236 12 12 13
+             239:      7(int) Constant 1774
+             237:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 238 26 17 20 239 12 12 13
+             242:      7(int) Constant 1817
+             240:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 242 12 12 13
+             243:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 242 12 12 13
+             244:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 245 20 17 226 12 19 245 12 13 234 237 240 243
+             246:             TypeArray 233(gl_PerVertex) 10
+             247:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 244 10
+             248:             TypePointer Input 246
+      249(gl_in):    248(ptr) Variable Input
+             250:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 251 247 17 226 12 19 251 249(gl_in) 108
+             252:             TypePointer Input 120(int)
+253(gl_InvocationID):    252(ptr) Variable Input
+             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 255 122 17 226 12 19 255 253(gl_InvocationID) 108
+             257:             TypePointer Input 27(fvec4)
+             261:      7(int) Constant 86
+             262:             TypeImage 24(float) 2D sampled format:Unknown
+             266:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             263:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 264 12 17 261 12 19 265 266 13
+             267:             TypeSampledImage 262
+             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 269 12 17 261 12 19 270 266 13
+             271:             TypePointer UniformConstant 267
+272(samplerHeight):    271(ptr) Variable UniformConstant
+             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 274 268 17 261 12 19 274 272(samplerHeight) 108
+             276:             TypeArray 92(fvec2) 10
+             277:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 93 10
+             278:             TypePointer Input 276
+       279(inUV):    278(ptr) Variable Input
+             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 281 277 17 261 12 19 281 279(inUV) 108
+             282:             TypePointer Input 92(fvec2)
+             287:    120(int) Constant 4
+             296:      7(int) Constant 89
+             297:             TypePointer Function 120(int)
+             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 300 122 17 296 12 54 21
+             312:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             316:      7(int) Constant 90
+             318:    120(int) Constant 3
+             320:             TypePointer Uniform 27(fvec4)
+             324:   24(float) Constant 1090519040
+             326:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             330:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             331:    47(bool) ConstantFalse
+             334:      7(int) Constant 92
+             340:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             343:      7(int) Constant 95
+             349:      7(int) Constant 100
+             351:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             357:      7(int) Constant 102
+             359:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             360:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             366:      7(int) Constant 104
+             367:             TypeArray 24(float) 22
+             368:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 26 22
+             369:             TypePointer Output 367
+370(gl_TessLevelInner):    369(ptr) Variable Output
+             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 372 368 17 366 12 19 372 370(gl_TessLevelInner) 108
+             373:             TypePointer Output 24(float)
+             376:      7(int) Constant 105
+             379:      7(int) Constant 106
+             380:             TypeArray 24(float) 21
+             381:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 26 21
+             382:             TypePointer Output 380
+383(gl_TessLevelOuter):    382(ptr) Variable Output
+             384:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 385 381 17 379 12 19 385 383(gl_TessLevelOuter) 108
+             388:      7(int) Constant 107
+             391:      7(int) Constant 108
+             392:    120(int) Constant 2
+             395:      7(int) Constant 109
+             400:      7(int) Constant 113
+             403:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
+             409:      7(int) Constant 115
+             419:      7(int) Constant 116
+             429:      7(int) Constant 117
+             439:      7(int) Constant 118
+             449:      7(int) Constant 119
+             457:      7(int) Constant 120
+             467:      7(int) Constant 126
+             470:      7(int) Constant 127
+             473:      7(int) Constant 128
+             476:      7(int) Constant 129
+             479:      7(int) Constant 130
+             482:      7(int) Constant 131
+             486:      7(int) Constant 137
+487(gl_PerVertex):             TypeStruct 27(fvec4) 24(float) 231 231
+             489:      7(int) Constant 110
+             488:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 28 17 20 489 12 12 13
+             490:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 238 26 17 20 473 12 12 13
+             492:      7(int) Constant 171
+             491:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 492 12 12 13
+             493:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 492 12 12 13
+             494:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 245 20 17 486 12 19 245 12 13 488 490 491 493
+             495:             TypeArray 487(gl_PerVertex) 21
+             496:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 494 21
+             497:             TypePointer Output 495
+     498(gl_out):    497(ptr) Variable Output
+             499:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 500 496 17 486 12 19 500 498(gl_out) 108
+             505:             TypePointer Output 27(fvec4)
+             508:      7(int) Constant 138
+             509:             TypeArray 140(fvec3) 21
+             510:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 141 21
+             511:             TypePointer Output 509
+  512(outNormal):    511(ptr) Variable Output
+             513:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 514 510 17 508 12 19 514 512(outNormal) 108
+             516:             TypeArray 140(fvec3) 10
+             517:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 141 10
+             518:             TypePointer Input 516
+   519(inNormal):    518(ptr) Variable Input
+             520:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 521 517 17 508 12 19 521 519(inNormal) 108
+             523:             TypePointer Input 140(fvec3)
+             526:             TypePointer Output 140(fvec3)
+             529:      7(int) Constant 139
+             530:             TypeArray 92(fvec2) 21
+             531:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 93 21
+             532:             TypePointer Output 530
+      533(outUV):    532(ptr) Variable Output
+             534:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 535 531 17 529 12 19 535 533(outUV) 108
+             540:             TypePointer Output 92(fvec2)
+                              Line 1 98 11
+        14(main):           4 Function None 5
+              23:             Label
+      410(param):     29(ptr) Variable Function
+      413(param):     29(ptr) Variable Function
+      420(param):     29(ptr) Variable Function
+      423(param):     29(ptr) Variable Function
+      430(param):     29(ptr) Variable Function
+      433(param):     29(ptr) Variable Function
+      440(param):     29(ptr) Variable Function
+      443(param):     29(ptr) Variable Function
+             346:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+             347:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             348:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 349 349 12 12
+             350:    120(int) Load 253(gl_InvocationID)
+             352:    47(bool) IEqual 350 135
+                              SelectionMerge 354 None
+                              BranchConditional 352 353 354
+             353:               Label
+             355:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             356:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 357 357 12 12
+             358:    47(bool)   FunctionCall 52(frustumCheck()
+             361:    47(bool)   LogicalNot 358
+                                SelectionMerge 363 None
+                                BranchConditional 361 362 397
+             362:                 Label
+             364:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             365:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 366 366 12 12
+             374:    373(ptr)     AccessChain 370(gl_TessLevelInner) 135
+                                  Store 374 142
+             375:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 376 376 12 12
+             377:    373(ptr)     AccessChain 370(gl_TessLevelInner) 123
+                                  Store 377 142
+             378:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 379 379 12 12
+             386:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 135
+                                  Store 386 142
+             387:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 388 388 12 12
+             389:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 123
+                                  Store 389 142
+             390:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 391 391 12 12
+             393:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 392
+                                  Store 393 142
+             394:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 395 395 12 12
+             396:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 318
+                                  Store 396 142
+                                  Branch 363
+             397:                 Label
+             398:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             399:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 400 400 12 12
+             401:    210(ptr)     AccessChain 117(ubo) 214
+             402:   24(float)     Load 401
+             404:    47(bool)     FOrdGreaterThan 402 142
+                                  SelectionMerge 406 None
+                                  BranchConditional 404 405 464
+             405:                   Label
+             407:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             408:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 409 409 12 12
+             411:    257(ptr)       AccessChain 249(gl_in) 318 135
+             412:   27(fvec4)       Load 411
+                                    Store 410(param) 412
+             414:    257(ptr)       AccessChain 249(gl_in) 135 135
+             415:   27(fvec4)       Load 414
+                                    Store 413(param) 415
+             416:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 410(param) 413(param)
+             417:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 135
+                                    Store 417 416
+             418:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 419 419 12 12
+             421:    257(ptr)       AccessChain 249(gl_in) 135 135
+             422:   27(fvec4)       Load 421
+                                    Store 420(param) 422
+             424:    257(ptr)       AccessChain 249(gl_in) 123 135
+             425:   27(fvec4)       Load 424
+                                    Store 423(param) 425
+             426:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 420(param) 423(param)
+             427:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 123
+                                    Store 427 426
+             428:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 429 429 12 12
+             431:    257(ptr)       AccessChain 249(gl_in) 123 135
+             432:   27(fvec4)       Load 431
+                                    Store 430(param) 432
+             434:    257(ptr)       AccessChain 249(gl_in) 392 135
+             435:   27(fvec4)       Load 434
+                                    Store 433(param) 435
+             436:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 430(param) 433(param)
+             437:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 392
+                                    Store 437 436
+             438:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 439 439 12 12
+             441:    257(ptr)       AccessChain 249(gl_in) 392 135
+             442:   27(fvec4)       Load 441
+                                    Store 440(param) 442
+             444:    257(ptr)       AccessChain 249(gl_in) 318 135
+             445:   27(fvec4)       Load 444
+                                    Store 443(param) 445
+             446:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 440(param) 443(param)
+             447:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 318
+                                    Store 447 446
+             448:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 449 449 12 12
+             450:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 135
+             451:   24(float)       Load 450
+             452:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 318
+             453:   24(float)       Load 452
+             454:   24(float)       ExtInst 3(GLSL.std.450) 46(FMix) 451 453 64
+             455:    373(ptr)       AccessChain 370(gl_TessLevelInner) 135
+                                    Store 455 454
+             456:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 457 457 12 12
+             458:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 392
+             459:   24(float)       Load 458
+             460:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 123
+             461:   24(float)       Load 460
+             462:   24(float)       ExtInst 3(GLSL.std.450) 46(FMix) 459 461 64
+             463:    373(ptr)       AccessChain 370(gl_TessLevelInner) 123
+                                    Store 463 462
+                                    Branch 406
+             464:                   Label
+             465:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             466:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 467 467 12 12
+             468:    373(ptr)       AccessChain 370(gl_TessLevelInner) 135
+                                    Store 468 218
+             469:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 470 470 12 12
+             471:    373(ptr)       AccessChain 370(gl_TessLevelInner) 123
+                                    Store 471 218
+             472:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 473 473 12 12
+             474:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 135
+                                    Store 474 218
+             475:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 476 476 12 12
+             477:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 123
+                                    Store 477 218
+             478:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 479 479 12 12
+             480:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 392
+                                    Store 480 218
+             481:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 482 482 12 12
+             483:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 318
+                                    Store 483 218
+                                    Branch 406
+             406:                 Label
+                                  Branch 363
+             363:               Label
+                                Branch 354
+             354:             Label
+             484:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+             485:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 486 486 12 12
+             501:    120(int) Load 253(gl_InvocationID)
+             502:    120(int) Load 253(gl_InvocationID)
+             503:    257(ptr) AccessChain 249(gl_in) 502 135
+             504:   27(fvec4) Load 503
+             506:    505(ptr) AccessChain 498(gl_out) 501 135
+                              Store 506 504
+             507:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 508 508 12 12
+             515:    120(int) Load 253(gl_InvocationID)
+             522:    120(int) Load 253(gl_InvocationID)
+             524:    523(ptr) AccessChain 519(inNormal) 522
+             525:  140(fvec3) Load 524
+             527:    526(ptr) AccessChain 512(outNormal) 515
+                              Store 527 525
+             528:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 529 529 12 12
+             536:    120(int) Load 253(gl_InvocationID)
+             537:    120(int) Load 253(gl_InvocationID)
+             538:    282(ptr) AccessChain 279(inUV) 537
+             539:   92(fvec2) Load 538
+             541:    540(ptr) AccessChain 533(outUV) 536
+                              Store 541 539
                               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
+                              Line 1 51 45
+34(screenSpaceTessFactor(vf4;vf4;):   24(float) Function None 30
+          32(p0):     29(ptr) FunctionParameter
+          33(p1):     29(ptr) FunctionParameter
+              37:             Label
+    60(midPoint):     29(ptr) Variable Function
+      72(radius):     71(ptr) Variable Function
+          83(v0):     29(ptr) Variable Function
+      131(clip0):     29(ptr) Variable Function
+      152(clip1):     29(ptr) Variable Function
+              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 36
+              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
+              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 40 32(p0) 43
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 44 33(p1) 43
+              56:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 36 34(screenSpaceTessFactor(vf4;vf4;)
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 36
+              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 59 59 12 12
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 61 60(midPoint) 43
+              65:   27(fvec4) Load 32(p0)
+              66:   27(fvec4) Load 33(p1)
+              67:   27(fvec4) FAdd 65 66
+              68:   27(fvec4) VectorTimesScalar 67 64
+                              Store 60(midPoint) 68
+              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 70 70 12 12
+              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 73 72(radius) 43
+              76:   27(fvec4) Load 32(p0)
+              77:   27(fvec4) Load 33(p1)
+              78:   24(float) ExtInst 3(GLSL.std.450) 67(Distance) 76 77
+              80:   24(float) FDiv 78 79
+                              Store 72(radius) 80
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 82 82 12 12
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 84 83(v0) 43
+             125:    124(ptr) AccessChain 117(ubo) 123
+             126:          87 Load 125
+             127:   27(fvec4) Load 60(midPoint)
+             128:   27(fvec4) MatrixTimesVector 126 127
+                              Store 83(v0) 128
+             129:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 130 130 12 12
+             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 132 131(clip0) 43
+             136:    124(ptr) AccessChain 117(ubo) 135
+             137:          87 Load 136
+             138:   27(fvec4) Load 83(v0)
+             139:   24(float) Load 72(radius)
+             144:   24(float) CompositeExtract 143 0
+             145:   24(float) CompositeExtract 143 1
+             146:   24(float) CompositeExtract 143 2
+             147:   27(fvec4) CompositeConstruct 139 144 145 146
+             148:   27(fvec4) FSub 138 147
+             149:   27(fvec4) MatrixTimesVector 137 148
+                              Store 131(clip0) 149
+             150:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 151 151 12 12
+             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 153 152(clip1) 43
+             156:    124(ptr) AccessChain 117(ubo) 135
+             157:          87 Load 156
+             158:   27(fvec4) Load 83(v0)
+             159:   24(float) Load 72(radius)
+             160:   24(float) CompositeExtract 143 0
+             161:   24(float) CompositeExtract 143 1
+             162:   24(float) CompositeExtract 143 2
+             163:   27(fvec4) CompositeConstruct 159 160 161 162
+             164:   27(fvec4) FAdd 158 163
+             165:   27(fvec4) MatrixTimesVector 157 164
+                              Store 152(clip1) 165
+             166:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 167 167 12 12
+             168:     71(ptr) AccessChain 131(clip0) 13
+             169:   24(float) Load 168
+             170:   27(fvec4) Load 131(clip0)
+             171:   27(fvec4) CompositeConstruct 169 169 169 169
+             172:   27(fvec4) FDiv 170 171
+                              Store 131(clip0) 172
+             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 174 174 12 12
+             175:     71(ptr) AccessChain 152(clip1) 13
+             176:   24(float) Load 175
+             177:   27(fvec4) Load 152(clip1)
+             178:   27(fvec4) CompositeConstruct 176 176 176 176
+             179:   27(fvec4) FDiv 177 178
+                              Store 152(clip1) 179
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 181 181 12 12
+             184:    183(ptr) AccessChain 117(ubo) 182
+             185:   92(fvec2) Load 184
+             186:   27(fvec4) Load 131(clip0)
+             187:   92(fvec2) VectorShuffle 186 186 0 1
+             188:   92(fvec2) FMul 187 185
+             189:     71(ptr) AccessChain 131(clip0) 12
+             190:   24(float) CompositeExtract 188 0
+                              Store 189 190
+             191:     71(ptr) AccessChain 131(clip0) 20
+             192:   24(float) CompositeExtract 188 1
+                              Store 191 192
+             193:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 194 194 12 12
+             195:    183(ptr) AccessChain 117(ubo) 182
+             196:   92(fvec2) Load 195
+             197:   27(fvec4) Load 152(clip1)
+             198:   92(fvec2) VectorShuffle 197 197 0 1
+             199:   92(fvec2) FMul 198 196
+             200:     71(ptr) AccessChain 152(clip1) 12
+             201:   24(float) CompositeExtract 199 0
+                              Store 200 201
+             202:     71(ptr) AccessChain 152(clip1) 20
+             203:   24(float) CompositeExtract 199 1
+                              Store 202 203
+             204:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 205 205 12 12
+             206:   27(fvec4) Load 131(clip0)
+             207:   27(fvec4) Load 152(clip1)
+             208:   24(float) ExtInst 3(GLSL.std.450) 67(Distance) 206 207
+             211:    210(ptr) AccessChain 117(ubo) 209
+             212:   24(float) Load 211
+             213:   24(float) FDiv 208 212
+             215:    210(ptr) AccessChain 117(ubo) 214
+             216:   24(float) Load 215
+             217:   24(float) FMul 213 216
+             220:   24(float) ExtInst 3(GLSL.std.450) 43(FClamp) 217 218 219
+                              ReturnValue 220
                               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
+                              Line 1 81 19
+52(frustumCheck():    47(bool) Function None 50
+              55:             Label
+        227(pos):     29(ptr) Variable Function
+          298(i):    297(ptr) Variable Function
+             223:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 54 52(frustumCheck()
+             224:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             225:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 226 226 12 12
+             230:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 228 227(pos) 43
+             256:    120(int) Load 253(gl_InvocationID)
+             258:    257(ptr) AccessChain 249(gl_in) 256 135
+             259:   27(fvec4) Load 258
+                              Store 227(pos) 259
+             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 261 261 12 12
+             275:         267 Load 272(samplerHeight)
+             283:    282(ptr) AccessChain 279(inUV) 135
+             284:   92(fvec2) Load 283
+             285:   27(fvec4) ImageSampleExplicitLod 275 284 Lod 142
+             286:   24(float) CompositeExtract 285 0
+             288:    210(ptr) AccessChain 117(ubo) 287
+             289:   24(float) Load 288
+             290:   24(float) FMul 286 289
+             291:     71(ptr) AccessChain 227(pos) 20
+             292:   24(float) Load 291
+             293:   24(float) FSub 292 290
+             294:     71(ptr) AccessChain 227(pos) 20
+                              Store 294 293
+             295:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
+             301:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 299 298(i) 43
+                              Store 298(i) 135
+                              Branch 302
+             302:             Label
+             306:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             307:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
+                              LoopMerge 304 305 None
+                              Branch 308
+             308:             Label
+             309:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             310:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
+             311:    120(int) Load 298(i)
+             313:    47(bool) SLessThan 311 182
+                              BranchConditional 313 303 304
+             303:               Label
+             314:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             315:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 316 316 12 12
+             317:   27(fvec4)   Load 227(pos)
+             319:    120(int)   Load 298(i)
+             321:    320(ptr)   AccessChain 117(ubo) 318 319
+             322:   27(fvec4)   Load 321
+             323:   24(float)   Dot 317 322
+             325:   24(float)   FAdd 323 324
+             327:    47(bool)   FOrdLessThan 325 142
+                                SelectionMerge 329 None
+                                BranchConditional 327 328 329
+             328:                 Label
+             332:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             333:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 334 334 12 12
+                                  ReturnValue 331
+             329:               Label
+                                Branch 305
+             305:               Label
+             336:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             337:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
+             338:    120(int)   Load 298(i)
+             339:    120(int)   IAdd 338 123
+                                Store 298(i) 339
+                                Branch 302
+             304:             Label
+             341:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
+             342:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 343 343 12 12
+                              ReturnValue 89
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.tese.out b/Test/baseResults/spv.debuginfo.glsl.tese.out
index d9d9681..0625c27 100644
--- a/Test/baseResults/spv.debuginfo.glsl.tese.out
+++ b/Test/baseResults/spv.debuginfo.glsl.tese.out
@@ -1,421 +1,445 @@
 spv.debuginfo.glsl.tese
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 315
+// Id's are bound by 332
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint TessellationEvaluation 14  "main" 42 59 86 105 133 169 280 294 302 314 321
+                              ExecutionMode 14 Quads
+                              ExecutionMode 14 SpacingEqual
+                              ExecutionMode 14 VertexOrderCw
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              29:             String  "float"
+              36:             String  "uv1"
+              44:             String  "inUV"
+              47:             String  "int"
+              61:             String  "gl_TessCoord"
+              71:             String  "uv2"
+              88:             String  "outUV"
+             100:             String  "n1"
+             107:             String  "inNormal"
+             120:             String  "n2"
+             135:             String  "outNormal"
+             149:             String  "pos1"
+             155:             String  "gl_Position"
+             158:             String  "gl_PointSize"
+             161:             String  "gl_CullDistance"
+             165:             String  "gl_PerVertex"
+             171:             String  "gl_in"
+             185:             String  "pos2"
+             199:             String  "pos"
+             211:             String  "type.2d.image"
+             212:             String  "@type.2d.image"
+             216:             String  "type.sampled.image"
+             217:             String  "@type.sampled.image"
+             221:             String  "displacementMap"
+             235:             String  "modelview"
+             240:             String  "lightPos"
+             243:             String  "frustumPlanes"
+             245:             String  "tessellatedEdgeSize"
+             249:             String  "viewportDim"
+             253:             String  "UBO"
+             257:             String  "ubo"
+             296:             String  "outViewVec"
+             304:             String  "outLightVec"
+             316:             String  "outWorldPos"
+             323:             String  "outEyePos"
+                              Name 14  "main"
+                              Name 34  "uv1"
+                              Name 42  "inUV"
+                              Name 59  "gl_TessCoord"
+                              Name 69  "uv2"
+                              Name 86  "outUV"
+                              Name 98  "n1"
+                              Name 105  "inNormal"
+                              Name 118  "n2"
+                              Name 133  "outNormal"
+                              Name 147  "pos1"
+                              Name 153  "gl_PerVertex"
+                              MemberName 153(gl_PerVertex) 0  "gl_Position"
+                              MemberName 153(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 153(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 153(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 169  "gl_in"
+                              Name 183  "pos2"
+                              Name 197  "pos"
+                              Name 219  "displacementMap"
+                              Name 233  "UBO"
+                              MemberName 233(UBO) 0  "projection"
+                              MemberName 233(UBO) 1  "modelview"
+                              MemberName 233(UBO) 2  "lightPos"
+                              MemberName 233(UBO) 3  "frustumPlanes"
+                              MemberName 233(UBO) 4  "displacementFactor"
+                              MemberName 233(UBO) 5  "tessellationFactor"
+                              MemberName 233(UBO) 6  "viewportDim"
+                              MemberName 233(UBO) 7  "tessellatedEdgeSize"
+                              Name 255  "ubo"
+                              Name 270  "gl_PerVertex"
+                              MemberName 270(gl_PerVertex) 0  "gl_Position"
+                              MemberName 270(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 270(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 270(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 280  ""
+                              Name 294  "outViewVec"
+                              Name 302  "outLightVec"
+                              Name 314  "outWorldPos"
+                              Name 321  "outEyePos"
+                              Decorate 42(inUV) Location 1
+                              Decorate 59(gl_TessCoord) BuiltIn TessCoord
+                              Decorate 86(outUV) Location 1
+                              Decorate 105(inNormal) Location 0
+                              Decorate 133(outNormal) Location 0
+                              MemberDecorate 153(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 153(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 153(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 153(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 153(gl_PerVertex) Block
+                              Decorate 219(displacementMap) DescriptorSet 0
+                              Decorate 219(displacementMap) Binding 1
+                              Decorate 231 ArrayStride 16
+                              MemberDecorate 233(UBO) 0 ColMajor
+                              MemberDecorate 233(UBO) 0 Offset 0
+                              MemberDecorate 233(UBO) 0 MatrixStride 16
+                              MemberDecorate 233(UBO) 1 ColMajor
+                              MemberDecorate 233(UBO) 1 Offset 64
+                              MemberDecorate 233(UBO) 1 MatrixStride 16
+                              MemberDecorate 233(UBO) 2 Offset 128
+                              MemberDecorate 233(UBO) 3 Offset 144
+                              MemberDecorate 233(UBO) 4 Offset 240
+                              MemberDecorate 233(UBO) 5 Offset 244
+                              MemberDecorate 233(UBO) 6 Offset 248
+                              MemberDecorate 233(UBO) 7 Offset 256
+                              Decorate 233(UBO) Block
+                              Decorate 255(ubo) DescriptorSet 0
+                              Decorate 255(ubo) Binding 0
+                              MemberDecorate 270(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 270(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 270(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 270(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 270(gl_PerVertex) Block
+                              Decorate 294(outViewVec) Location 2
+                              Decorate 302(outLightVec) Location 3
+                              Decorate 314(outWorldPos) Location 5
+                              Decorate 321(outEyePos) Location 4
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              27:      7(int) Constant 56
+              28:             TypeFloat 32
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12
+              31:             TypeVector 28(float) 2
+              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 22
+              33:             TypePointer Function 31(fvec2)
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 36 32 17 27 12 16 21
+              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              39:             TypeArray 31(fvec2) 10
+              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 32 10
+              41:             TypePointer Input 39
+        42(inUV):     41(ptr) Variable Input
+              45:      7(int) Constant 8
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 44 40 17 27 12 19 44 42(inUV) 45
+              46:             TypeInt 32 1
+              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 47 10 21 12
+              49:     46(int) Constant 0
+              50:             TypePointer Input 31(fvec2)
+              53:     46(int) Constant 1
+              56:             TypeVector 28(float) 3
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13
+              58:             TypePointer Input 56(fvec3)
+59(gl_TessCoord):     58(ptr) Variable Input
+              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 61 57 17 27 12 19 61 59(gl_TessCoord) 45
+              62:             TypePointer Input 28(float)
+              68:      7(int) Constant 57
+              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 71 32 17 68 12 16 21
+              73:     46(int) Constant 3
+              76:     46(int) Constant 2
+              84:      7(int) Constant 58
+              85:             TypePointer Output 31(fvec2)
+       86(outUV):     85(ptr) Variable Output
+              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 88 32 17 84 12 19 88 86(outUV) 45
+              96:      7(int) Constant 60
+              97:             TypePointer Function 56(fvec3)
+              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 100 57 17 96 12 16 21
+             102:             TypeArray 56(fvec3) 10
+             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 57 10
+             104:             TypePointer Input 102
+   105(inNormal):    104(ptr) Variable Input
+             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 107 103 17 96 12 19 107 105(inNormal) 45
+             117:      7(int) Constant 61
+             119:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 120 57 17 117 12 16 21
+             131:      7(int) Constant 62
+             132:             TypePointer Output 56(fvec3)
+  133(outNormal):    132(ptr) Variable Output
+             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 135 57 17 131 12 19 135 133(outNormal) 45
+             143:      7(int) Constant 65
+             144:             TypeVector 28(float) 4
+             145:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 21
+             146:             TypePointer Function 144(fvec4)
+             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 149 145 17 143 12 16 21
+             151:             TypeArray 28(float) 20
+             152:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 20
+153(gl_PerVertex):             TypeStruct 144(fvec4) 28(float) 151 151
+             156:      7(int) Constant 1756
+             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 155 145 17 20 156 12 12 13
+             159:      7(int) Constant 1774
+             157:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 158 30 17 20 159 12 12 13
+             162:      7(int) Constant 1817
+             160:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 162 12 12 13
+             163:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 162 12 12 13
+             164:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 165 20 17 143 12 19 165 12 13 154 157 160 163
+             166:             TypeArray 153(gl_PerVertex) 10
+             167:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 164 10
+             168:             TypePointer Input 166
+      169(gl_in):    168(ptr) Variable Input
+             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 171 167 17 143 12 19 171 169(gl_in) 45
+             172:             TypePointer Input 144(fvec4)
+             182:      7(int) Constant 66
+             184:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 185 145 17 182 12 16 21
+             196:      7(int) Constant 67
+             198:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 199 145 17 196 12 16 21
+             208:      7(int) Constant 69
+             209:             TypeImage 28(float) 2D sampled format:Unknown
+             213:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 211 12 17 208 12 19 212 213 13
+             214:             TypeSampledImage 209
+             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 216 12 17 208 12 19 217 213 13
+             218:             TypePointer UniformConstant 214
+219(displacementMap):    218(ptr) Variable UniformConstant
+             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 221 215 17 208 12 19 221 219(displacementMap) 45
+             224:   28(float) Constant 0
+             227:             TypeMatrix 144(fvec4) 4
+             229:             TypeBool
+             230:   229(bool) ConstantTrue
+             228:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 145 21 230
+             231:             TypeArray 144(fvec4) 11
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 145 11
+        233(UBO):             TypeStruct 227 227 144(fvec4) 231 28(float) 28(float) 31(fvec2) 28(float)
+             236:      7(int) Constant 30
+             237:      7(int) Constant 7
+             234:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 228 17 236 237 12 12 13
+             238:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 228 17 236 237 12 12 13
+             241:      7(int) Constant 31
+             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 240 145 17 241 237 12 12 13
+             242:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 243 232 17 10 237 12 12 13
+             246:      7(int) Constant 36
+             244:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 245 30 17 246 45 12 12 13
+             247:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 245 30 17 246 45 12 12 13
+             250:      7(int) Constant 35
+             248:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 249 32 17 250 237 12 12 13
+             251:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 245 30 17 246 45 12 12 13
+             252:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 253 20 17 208 12 19 253 12 13 234 238 239 242 244 247 248 251
+             254:             TypePointer Uniform 233(UBO)
+        255(ubo):    254(ptr) Variable Uniform
+             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 257 252 17 208 12 19 257 255(ubo) 45
+             258:     46(int) Constant 4
+             259:             TypePointer Uniform 28(float)
+             263:             TypePointer Function 28(float)
+             269:      7(int) Constant 71
+270(gl_PerVertex):             TypeStruct 144(fvec4) 28(float) 151 151
+             272:      7(int) Constant 165
+             271:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 155 145 17 20 272 12 12 13
+             274:      7(int) Constant 183
+             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 158 30 17 20 274 12 12 13
+             276:      7(int) Constant 226
+             275:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 276 12 12 13
+             277:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 276 12 12 13
+             278:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 165 20 17 269 12 19 165 12 13 271 273 275 277
+             279:             TypePointer Output 270(gl_PerVertex)
+             280:    279(ptr) Variable Output
+             281:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 278 17 269 12 19 1 280 45
+             282:             TypePointer Uniform 227
+             290:             TypePointer Output 144(fvec4)
+             293:      7(int) Constant 74
+ 294(outViewVec):    132(ptr) Variable Output
+             295:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 296 57 17 293 12 19 296 294(outViewVec) 45
+             301:      7(int) Constant 75
+302(outLightVec):    132(ptr) Variable Output
+             303:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 304 57 17 301 12 19 304 302(outLightVec) 45
+             305:             TypePointer Uniform 144(fvec4)
+             313:      7(int) Constant 76
+314(outWorldPos):    132(ptr) Variable Output
+             315:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 316 57 17 313 12 19 316 314(outWorldPos) 45
+             320:      7(int) Constant 77
+  321(outEyePos):    132(ptr) Variable Output
+             322:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 323 57 17 320 12 19 323 321(outEyePos) 45
+                              Line 1 53 11
+        14(main):           4 Function None 5
+              23:             Label
+         34(uv1):     33(ptr) Variable Function
+         69(uv2):     33(ptr) Variable Function
+          98(n1):     97(ptr) Variable Function
+         118(n2):     97(ptr) Variable Function
+       147(pos1):    146(ptr) Variable Function
+       183(pos2):    146(ptr) Variable Function
+        197(pos):    146(ptr) Variable Function
+              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
+              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 35 34(uv1) 38
+              51:     50(ptr) AccessChain 42(inUV) 49
+              52:   31(fvec2) Load 51
+              54:     50(ptr) AccessChain 42(inUV) 53
+              55:   31(fvec2) Load 54
+              63:     62(ptr) AccessChain 59(gl_TessCoord) 12
+              64:   28(float) Load 63
+              65:   31(fvec2) CompositeConstruct 64 64
+              66:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 52 55 65
+                              Store 34(uv1) 66
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 68 68 12 12
+              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 70 69(uv2) 38
+              74:     50(ptr) AccessChain 42(inUV) 73
+              75:   31(fvec2) Load 74
+              77:     50(ptr) AccessChain 42(inUV) 76
+              78:   31(fvec2) Load 77
+              79:     62(ptr) AccessChain 59(gl_TessCoord) 12
+              80:   28(float) Load 79
+              81:   31(fvec2) CompositeConstruct 80 80
+              82:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 75 78 81
+                              Store 69(uv2) 82
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 84 84 12 12
+              89:   31(fvec2) Load 34(uv1)
+              90:   31(fvec2) Load 69(uv2)
+              91:     62(ptr) AccessChain 59(gl_TessCoord) 20
+              92:   28(float) Load 91
+              93:   31(fvec2) CompositeConstruct 92 92
+              94:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 89 90 93
+                              Store 86(outUV) 94
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 96 96 12 12
+             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 99 98(n1) 38
+             108:     58(ptr) AccessChain 105(inNormal) 49
+             109:   56(fvec3) Load 108
+             110:     58(ptr) AccessChain 105(inNormal) 53
+             111:   56(fvec3) Load 110
+             112:     62(ptr) AccessChain 59(gl_TessCoord) 12
+             113:   28(float) Load 112
+             114:   56(fvec3) CompositeConstruct 113 113 113
+             115:   56(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 109 111 114
+                              Store 98(n1) 115
+             116:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 117 117 12 12
+             121:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 119 118(n2) 38
+             122:     58(ptr) AccessChain 105(inNormal) 73
+             123:   56(fvec3) Load 122
+             124:     58(ptr) AccessChain 105(inNormal) 76
+             125:   56(fvec3) Load 124
+             126:     62(ptr) AccessChain 59(gl_TessCoord) 12
+             127:   28(float) Load 126
+             128:   56(fvec3) CompositeConstruct 127 127 127
+             129:   56(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 123 125 128
+                              Store 118(n2) 129
+             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 131 131 12 12
+             136:   56(fvec3) Load 98(n1)
+             137:   56(fvec3) Load 118(n2)
+             138:     62(ptr) AccessChain 59(gl_TessCoord) 20
+             139:   28(float) Load 138
+             140:   56(fvec3) CompositeConstruct 139 139 139
+             141:   56(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 136 137 140
+                              Store 133(outNormal) 141
+             142:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 143 143 12 12
+             150:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 148 147(pos1) 38
+             173:    172(ptr) AccessChain 169(gl_in) 49 49
+             174:  144(fvec4) Load 173
+             175:    172(ptr) AccessChain 169(gl_in) 53 49
+             176:  144(fvec4) Load 175
+             177:     62(ptr) AccessChain 59(gl_TessCoord) 12
+             178:   28(float) Load 177
+             179:  144(fvec4) CompositeConstruct 178 178 178 178
+             180:  144(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 174 176 179
+                              Store 147(pos1) 180
+             181:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 182 182 12 12
+             186:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 184 183(pos2) 38
+             187:    172(ptr) AccessChain 169(gl_in) 73 49
+             188:  144(fvec4) Load 187
+             189:    172(ptr) AccessChain 169(gl_in) 76 49
+             190:  144(fvec4) Load 189
+             191:     62(ptr) AccessChain 59(gl_TessCoord) 12
+             192:   28(float) Load 191
+             193:  144(fvec4) CompositeConstruct 192 192 192 192
+             194:  144(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 188 190 193
+                              Store 183(pos2) 194
+             195:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 196 196 12 12
+             200:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 198 197(pos) 38
+             201:  144(fvec4) Load 147(pos1)
+             202:  144(fvec4) Load 183(pos2)
+             203:     62(ptr) AccessChain 59(gl_TessCoord) 20
+             204:   28(float) Load 203
+             205:  144(fvec4) CompositeConstruct 204 204 204 204
+             206:  144(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 201 202 205
+                              Store 197(pos) 206
+             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 208 208 12 12
+             222:         214 Load 219(displacementMap)
+             223:   31(fvec2) Load 86(outUV)
+             225:  144(fvec4) ImageSampleExplicitLod 222 223 Lod 224
+             226:   28(float) CompositeExtract 225 0
+             260:    259(ptr) AccessChain 255(ubo) 258
+             261:   28(float) Load 260
+             262:   28(float) FMul 226 261
+             264:    263(ptr) AccessChain 197(pos) 20
+             265:   28(float) Load 264
+             266:   28(float) FSub 265 262
+             267:    263(ptr) AccessChain 197(pos) 20
+                              Store 267 266
+             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 269 269 12 12
+             283:    282(ptr) AccessChain 255(ubo) 49
+             284:         227 Load 283
+             285:    282(ptr) AccessChain 255(ubo) 53
+             286:         227 Load 285
+             287:         227 MatrixTimesMatrix 284 286
+             288:  144(fvec4) Load 197(pos)
+             289:  144(fvec4) MatrixTimesVector 287 288
+             291:    290(ptr) AccessChain 280 49
+                              Store 291 289
+             292:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 293 293 12 12
+             297:  144(fvec4) Load 197(pos)
+             298:   56(fvec3) VectorShuffle 297 297 0 1 2
+             299:   56(fvec3) FNegate 298
+                              Store 294(outViewVec) 299
+             300:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 301 301 12 12
+             306:    305(ptr) AccessChain 255(ubo) 76
+             307:  144(fvec4) Load 306
+             308:   56(fvec3) VectorShuffle 307 307 0 1 2
+             309:   56(fvec3) Load 294(outViewVec)
+             310:   56(fvec3) FAdd 308 309
+             311:   56(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 310
+                              Store 302(outLightVec) 311
+             312:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 313 313 12 12
+             317:  144(fvec4) Load 197(pos)
+             318:   56(fvec3) VectorShuffle 317 317 0 1 2
+                              Store 314(outWorldPos) 318
+             319:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 320 320 12 12
+             324:    282(ptr) AccessChain 255(ubo) 53
+             325:         227 Load 324
+             326:  144(fvec4) Load 197(pos)
+             327:  144(fvec4) MatrixTimesVector 325 326
+             328:   28(float) CompositeExtract 327 0
+             329:   28(float) CompositeExtract 327 1
+             330:   28(float) CompositeExtract 327 2
+             331:   56(fvec3) CompositeConstruct 328 329 330
+                              Store 321(outEyePos) 331
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.vert.out b/Test/baseResults/spv.debuginfo.glsl.vert.out
index 3d5352f..e0c9d60 100644
--- a/Test/baseResults/spv.debuginfo.glsl.vert.out
+++ b/Test/baseResults/spv.debuginfo.glsl.vert.out
@@ -1,484 +1,541 @@
 spv.debuginfo.glsl.vert
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 374
+// Id's are bound by 424
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint Vertex 14  "main" 34 39 45 51 59 75 289 307 312 337 353 370 409 418
+               1:             String  ""
+               9:             String  "uint"
+              15:             String  "main"
+              18:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+"
+              29:             String  "float"
+              36:             String  "outColor"
+              41:             String  "inColor"
+              47:             String  "outUV"
+              53:             String  "inUV"
+              56:             String  "int"
+              61:             String  "instanceTexIndex"
+              72:             String  "s"
+              77:             String  "instanceRot"
+              89:             String  "modelview"
+              94:             String  "lightPos"
+              97:             String  "globSpeed"
+             101:             String  "UBO"
+             105:             String  "ubo"
+             116:             String  "c"
+             131:             String  "mx"
+             174:             String  "my"
+             211:             String  "mz"
+             232:             String  "rotMat"
+             261:             String  "gRotMat"
+             287:             String  "locPos"
+             291:             String  "inPos"
+             303:             String  "pos"
+             309:             String  "instanceScale"
+             314:             String  "instancePos"
+             327:             String  "gl_Position"
+             330:             String  "gl_PointSize"
+             332:             String  "gl_CullDistance"
+             335:             String  "gl_PerVertex"
+             355:             String  "outNormal"
+             372:             String  "inNormal"
+             391:             String  "lPos"
+             411:             String  "outLightVec"
+             420:             String  "outViewVec"
+                              Name 14  "main"
+                              Name 34  "outColor"
+                              Name 39  "inColor"
+                              Name 45  "outUV"
+                              Name 51  "inUV"
+                              Name 59  "instanceTexIndex"
+                              Name 70  "s"
+                              Name 75  "instanceRot"
+                              Name 87  "UBO"
+                              MemberName 87(UBO) 0  "projection"
+                              MemberName 87(UBO) 1  "modelview"
+                              MemberName 87(UBO) 2  "lightPos"
+                              MemberName 87(UBO) 3  "locSpeed"
+                              MemberName 87(UBO) 4  "globSpeed"
+                              Name 103  "ubo"
+                              Name 114  "c"
+                              Name 129  "mx"
+                              Name 172  "my"
+                              Name 209  "mz"
+                              Name 230  "rotMat"
+                              Name 259  "gRotMat"
+                              Name 285  "locPos"
+                              Name 289  "inPos"
+                              Name 301  "pos"
+                              Name 307  "instanceScale"
+                              Name 312  "instancePos"
+                              Name 325  "gl_PerVertex"
+                              MemberName 325(gl_PerVertex) 0  "gl_Position"
+                              MemberName 325(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 325(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 325(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 337  ""
+                              Name 353  "outNormal"
+                              Name 370  "inNormal"
+                              Name 389  "lPos"
+                              Name 409  "outLightVec"
+                              Name 418  "outViewVec"
+                              Decorate 34(outColor) Location 1
+                              Decorate 39(inColor) Location 3
+                              Decorate 45(outUV) Location 2
+                              Decorate 51(inUV) Location 2
+                              Decorate 59(instanceTexIndex) Location 7
+                              Decorate 75(instanceRot) Location 5
+                              MemberDecorate 87(UBO) 0 ColMajor
+                              MemberDecorate 87(UBO) 0 Offset 0
+                              MemberDecorate 87(UBO) 0 MatrixStride 16
+                              MemberDecorate 87(UBO) 1 ColMajor
+                              MemberDecorate 87(UBO) 1 Offset 64
+                              MemberDecorate 87(UBO) 1 MatrixStride 16
+                              MemberDecorate 87(UBO) 2 Offset 128
+                              MemberDecorate 87(UBO) 3 Offset 144
+                              MemberDecorate 87(UBO) 4 Offset 148
+                              Decorate 87(UBO) Block
+                              Decorate 103(ubo) DescriptorSet 0
+                              Decorate 103(ubo) Binding 0
+                              Decorate 289(inPos) Location 0
+                              Decorate 307(instanceScale) Location 6
+                              Decorate 312(instancePos) Location 4
+                              MemberDecorate 325(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 325(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 325(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 325(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 325(gl_PerVertex) Block
+                              Decorate 353(outNormal) Location 0
+                              Decorate 370(inNormal) Location 1
+                              Decorate 409(outLightVec) Location 4
+                              Decorate 418(outViewVec) Location 3
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               8:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
+              20:      7(int) Constant 1
+              21:      7(int) Constant 4
+              22:      7(int) Constant 2
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
+              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
+              27:      7(int) Constant 56
+              28:             TypeFloat 32
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12
+              31:             TypeVector 28(float) 3
+              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13
+              33:             TypePointer Output 31(fvec3)
+    34(outColor):     33(ptr) Variable Output
+              37:      7(int) Constant 8
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 36 32 17 27 12 19 36 34(outColor) 37
+              38:             TypePointer Input 31(fvec3)
+     39(inColor):     38(ptr) Variable Input
+              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 41 32 17 27 12 19 41 39(inColor) 37
+              44:      7(int) Constant 57
+       45(outUV):     33(ptr) Variable Output
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 47 32 17 44 12 19 47 45(outUV) 37
+              48:             TypeVector 28(float) 2
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 22
+              50:             TypePointer Input 48(fvec2)
+        51(inUV):     50(ptr) Variable Input
+              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 53 49 17 44 12 19 53 51(inUV) 37
+              55:             TypeInt 32 1
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 56 10 21 12
+              58:             TypePointer Input 55(int)
+59(instanceTexIndex):     58(ptr) Variable Input
+              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 61 57 17 44 12 19 61 59(instanceTexIndex) 37
+              68:      7(int) Constant 62
+              69:             TypePointer Function 28(float)
+              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 72 30 17 68 12 16 21
+              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+ 75(instanceRot):     38(ptr) Variable Input
+              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 77 32 17 68 12 19 77 75(instanceRot) 37
+              78:             TypePointer Input 28(float)
+              81:             TypeVector 28(float) 4
+              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 21
+              83:             TypeMatrix 81(fvec4) 4
+              85:             TypeBool
+              86:    85(bool) ConstantTrue
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 82 21 86
+         87(UBO):             TypeStruct 83 83 81(fvec4) 28(float) 28(float)
+              90:      7(int) Constant 42
+              91:      7(int) Constant 7
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 84 17 90 91 12 12 13
+              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 84 17 90 91 12 12 13
+              95:      7(int) Constant 43
+              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 82 17 95 91 12 12 13
+              98:      7(int) Constant 45
+              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 97 30 17 98 37 12 12 13
+              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 97 30 17 98 37 12 12 13
+             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 101 20 17 68 12 19 101 12 13 88 92 93 96 99
+             102:             TypePointer Uniform 87(UBO)
+        103(ubo):    102(ptr) Variable Uniform
+             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 105 100 17 68 12 19 105 103(ubo) 37
+             106:     55(int) Constant 3
+             107:             TypePointer Uniform 28(float)
+             113:      7(int) Constant 63
+             115:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 116 30 17 113 12 16 21
+             125:      7(int) Constant 65
+             126:             TypeMatrix 31(fvec3) 3
+             127:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 32 13 86
+             128:             TypePointer Function 126
+             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 131 127 17 125 12 16 21
+             133:     55(int) Constant 0
+             136:   28(float) Constant 0
+             138:             TypePointer Function 31(fvec3)
+             141:      7(int) Constant 66
+             142:     55(int) Constant 1
+             149:      7(int) Constant 67
+             150:     55(int) Constant 2
+             151:   28(float) Constant 1065353216
+             152:   31(fvec3) ConstantComposite 136 136 151
+             155:      7(int) Constant 70
+             163:      7(int) Constant 71
+             171:      7(int) Constant 73
+             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 174 127 17 171 12 16 21
+             181:      7(int) Constant 74
+             182:   31(fvec3) ConstantComposite 136 151 136
+             185:      7(int) Constant 75
+             192:      7(int) Constant 78
+             200:      7(int) Constant 79
+             208:      7(int) Constant 81
+             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 211 127 17 208 12 16 21
+             213:   31(fvec3) ConstantComposite 151 136 136
+             216:      7(int) Constant 82
+             222:      7(int) Constant 83
+             229:      7(int) Constant 85
+             231:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 232 127 17 229 12 16 21
+             240:      7(int) Constant 88
+             243:     55(int) Constant 4
+             249:      7(int) Constant 89
+             257:      7(int) Constant 90
+             258:             TypePointer Function 83
+             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 261 84 17 257 12 16 21
+             266:             TypePointer Function 81(fvec4)
+             269:      7(int) Constant 91
+             270:   81(fvec4) ConstantComposite 136 151 136 136
+             273:      7(int) Constant 92
+             280:      7(int) Constant 93
+             281:   81(fvec4) ConstantComposite 136 136 136 151
+             284:      7(int) Constant 95
+             286:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 287 82 17 284 12 16 21
+      289(inPos):     38(ptr) Variable Input
+             290:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 291 32 17 284 12 19 291 289(inPos) 37
+             300:      7(int) Constant 96
+             302:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 303 82 17 300 12 16 21
+307(instanceScale):     78(ptr) Variable Input
+             308:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 309 30 17 300 12 19 309 307(instanceScale) 37
+312(instancePos):     38(ptr) Variable Input
+             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 314 32 17 300 12 19 314 312(instancePos) 37
+             322:      7(int) Constant 98
+             323:             TypeArray 28(float) 20
+             324:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 20
+325(gl_PerVertex):             TypeStruct 81(fvec4) 28(float) 323 323
+             328:      7(int) Constant 24
+             326:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 327 82 17 20 328 12 12 13
+             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 330 30 17 20 90 12 12 13
+             331:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 332 324 17 20 229 12 12 13
+             333:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 332 324 17 20 229 12 12 13
+             334:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 335 20 17 322 12 19 335 12 13 326 329 331 333
+             336:             TypePointer Output 325(gl_PerVertex)
+             337:    336(ptr) Variable Output
+             338:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 334 17 322 12 19 1 337 37
+             339:             TypePointer Uniform 83
+             349:             TypePointer Output 81(fvec4)
+             352:      7(int) Constant 99
+  353(outNormal):     33(ptr) Variable Output
+             354:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 355 32 17 352 12 19 355 353(outNormal) 37
+   370(inNormal):     38(ptr) Variable Input
+             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 372 32 17 352 12 19 372 370(inNormal) 37
+             376:      7(int) Constant 101
+             388:      7(int) Constant 102
+             390:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 391 32 17 388 12 16 21
+             402:             TypePointer Uniform 81(fvec4)
+             408:      7(int) Constant 103
+409(outLightVec):     33(ptr) Variable Output
+             410:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 411 32 17 408 12 19 411 409(outLightVec) 37
+             417:      7(int) Constant 104
+ 418(outViewVec):     33(ptr) Variable Output
+             419:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 420 32 17 417 12 19 420 418(outViewVec) 37
+                              Line 1 54 11
+        14(main):           4 Function None 5
+              23:             Label
+           70(s):     69(ptr) Variable Function
+          114(c):     69(ptr) Variable Function
+         129(mx):    128(ptr) Variable Function
+         172(my):    128(ptr) Variable Function
+         209(mz):    128(ptr) Variable Function
+     230(rotMat):    128(ptr) Variable Function
+    259(gRotMat):    258(ptr) Variable Function
+     285(locPos):    266(ptr) Variable Function
+        301(pos):    266(ptr) Variable Function
+       389(lPos):    138(ptr) Variable Function
+              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
+              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
+              42:   31(fvec3) Load 39(inColor)
+                              Store 34(outColor) 42
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 44 44 12 12
+              54:   48(fvec2) Load 51(inUV)
+              62:     55(int) Load 59(instanceTexIndex)
+              63:   28(float) ConvertSToF 62
+              64:   28(float) CompositeExtract 54 0
+              65:   28(float) CompositeExtract 54 1
+              66:   31(fvec3) CompositeConstruct 64 65 63
+                              Store 45(outUV) 66
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 68 68 12 12
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 71 70(s) 74
+              79:     78(ptr) AccessChain 75(instanceRot) 12
+              80:   28(float) Load 79
+             108:    107(ptr) AccessChain 103(ubo) 106
+             109:   28(float) Load 108
+             110:   28(float) FAdd 80 109
+             111:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 110
+                              Store 70(s) 111
+             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 113 113 12 12
+             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 115 114(c) 74
+             118:     78(ptr) AccessChain 75(instanceRot) 12
+             119:   28(float) Load 118
+             120:    107(ptr) AccessChain 103(ubo) 106
+             121:   28(float) Load 120
+             122:   28(float) FAdd 119 121
+             123:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 122
+                              Store 114(c) 123
+             124:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 125 125 12 12
+             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 130 129(mx) 74
+             134:   28(float) Load 114(c)
+             135:   28(float) Load 70(s)
+             137:   31(fvec3) CompositeConstruct 134 135 136
+             139:    138(ptr) AccessChain 129(mx) 133
+                              Store 139 137
+             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 141 141 12 12
+             143:   28(float) Load 70(s)
+             144:   28(float) FNegate 143
+             145:   28(float) Load 114(c)
+             146:   31(fvec3) CompositeConstruct 144 145 136
+             147:    138(ptr) AccessChain 129(mx) 142
+                              Store 147 146
+             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 149 149 12 12
+             153:    138(ptr) AccessChain 129(mx) 150
+                              Store 153 152
+             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 155 155 12 12
+             156:     78(ptr) AccessChain 75(instanceRot) 20
+             157:   28(float) Load 156
+             158:    107(ptr) AccessChain 103(ubo) 106
+             159:   28(float) Load 158
+             160:   28(float) FAdd 157 159
+             161:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 160
+                              Store 70(s) 161
+             162:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 163 163 12 12
+             164:     78(ptr) AccessChain 75(instanceRot) 20
+             165:   28(float) Load 164
+             166:    107(ptr) AccessChain 103(ubo) 106
+             167:   28(float) Load 166
+             168:   28(float) FAdd 165 167
+             169:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 168
+                              Store 114(c) 169
+             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 171 171 12 12
+             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 173 172(my) 74
+             176:   28(float) Load 114(c)
+             177:   28(float) Load 70(s)
+             178:   31(fvec3) CompositeConstruct 176 136 177
+             179:    138(ptr) AccessChain 172(my) 133
+                              Store 179 178
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 181 181 12 12
+             183:    138(ptr) AccessChain 172(my) 142
+                              Store 183 182
+             184:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 185 185 12 12
+             186:   28(float) Load 70(s)
+             187:   28(float) FNegate 186
+             188:   28(float) Load 114(c)
+             189:   31(fvec3) CompositeConstruct 187 136 188
+             190:    138(ptr) AccessChain 172(my) 150
+                              Store 190 189
+             191:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 192 192 12 12
+             193:     78(ptr) AccessChain 75(instanceRot) 22
+             194:   28(float) Load 193
+             195:    107(ptr) AccessChain 103(ubo) 106
+             196:   28(float) Load 195
+             197:   28(float) FAdd 194 196
+             198:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 197
+                              Store 70(s) 198
+             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 200 200 12 12
+             201:     78(ptr) AccessChain 75(instanceRot) 22
+             202:   28(float) Load 201
+             203:    107(ptr) AccessChain 103(ubo) 106
+             204:   28(float) Load 203
+             205:   28(float) FAdd 202 204
+             206:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 205
+                              Store 114(c) 206
+             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 208 208 12 12
+             212:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 210 209(mz) 74
+             214:    138(ptr) AccessChain 209(mz) 133
+                              Store 214 213
+             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 216 216 12 12
+             217:   28(float) Load 114(c)
+             218:   28(float) Load 70(s)
+             219:   31(fvec3) CompositeConstruct 136 217 218
+             220:    138(ptr) AccessChain 209(mz) 142
+                              Store 220 219
+             221:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 222 222 12 12
+             223:   28(float) Load 70(s)
+             224:   28(float) FNegate 223
+             225:   28(float) Load 114(c)
+             226:   31(fvec3) CompositeConstruct 136 224 225
+             227:    138(ptr) AccessChain 209(mz) 150
+                              Store 227 226
+             228:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 229 229 12 12
+             233:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 231 230(rotMat) 74
+             234:         126 Load 209(mz)
+             235:         126 Load 172(my)
+             236:         126 MatrixTimesMatrix 234 235
+             237:         126 Load 129(mx)
+             238:         126 MatrixTimesMatrix 236 237
+                              Store 230(rotMat) 238
+             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 240 240 12 12
+             241:     78(ptr) AccessChain 75(instanceRot) 20
+             242:   28(float) Load 241
+             244:    107(ptr) AccessChain 103(ubo) 243
+             245:   28(float) Load 244
+             246:   28(float) FAdd 242 245
+             247:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 246
+                              Store 70(s) 247
+             248:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 249 249 12 12
+             250:     78(ptr) AccessChain 75(instanceRot) 20
+             251:   28(float) Load 250
+             252:    107(ptr) AccessChain 103(ubo) 243
+             253:   28(float) Load 252
+             254:   28(float) FAdd 251 253
+             255:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 254
+                              Store 114(c) 255
+             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 257 257 12 12
+             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 260 259(gRotMat) 74
+             263:   28(float) Load 114(c)
+             264:   28(float) Load 70(s)
+             265:   81(fvec4) CompositeConstruct 263 136 264 136
+             267:    266(ptr) AccessChain 259(gRotMat) 133
+                              Store 267 265
+             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 269 269 12 12
+             271:    266(ptr) AccessChain 259(gRotMat) 142
+                              Store 271 270
+             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 273 273 12 12
+             274:   28(float) Load 70(s)
+             275:   28(float) FNegate 274
+             276:   28(float) Load 114(c)
+             277:   81(fvec4) CompositeConstruct 275 136 276 136
+             278:    266(ptr) AccessChain 259(gRotMat) 150
+                              Store 278 277
+             279:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 280 280 12 12
+             282:    266(ptr) AccessChain 259(gRotMat) 106
+                              Store 282 281
+             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 284 284 12 12
+             288:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 286 285(locPos) 74
+             292:   31(fvec3) Load 289(inPos)
+             293:         126 Load 230(rotMat)
+             294:   31(fvec3) VectorTimesMatrix 292 293
+             295:   28(float) CompositeExtract 294 0
+             296:   28(float) CompositeExtract 294 1
+             297:   28(float) CompositeExtract 294 2
+             298:   81(fvec4) CompositeConstruct 295 296 297 151
+                              Store 285(locPos) 298
+             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 300 300 12 12
+             304:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 302 301(pos) 74
+             305:   81(fvec4) Load 285(locPos)
+             306:   31(fvec3) VectorShuffle 305 305 0 1 2
+             310:   28(float) Load 307(instanceScale)
+             311:   31(fvec3) VectorTimesScalar 306 310
+             315:   31(fvec3) Load 312(instancePos)
+             316:   31(fvec3) FAdd 311 315
+             317:   28(float) CompositeExtract 316 0
+             318:   28(float) CompositeExtract 316 1
+             319:   28(float) CompositeExtract 316 2
+             320:   81(fvec4) CompositeConstruct 317 318 319 151
+                              Store 301(pos) 320
+             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 322 322 12 12
+             340:    339(ptr) AccessChain 103(ubo) 133
+             341:          83 Load 340
+             342:    339(ptr) AccessChain 103(ubo) 142
+             343:          83 Load 342
+             344:          83 MatrixTimesMatrix 341 343
+             345:          83 Load 259(gRotMat)
+             346:          83 MatrixTimesMatrix 344 345
+             347:   81(fvec4) Load 301(pos)
+             348:   81(fvec4) MatrixTimesVector 346 347
+             350:    349(ptr) AccessChain 337 133
+                              Store 350 348
+             351:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 352 352 12 12
+             356:    339(ptr) AccessChain 103(ubo) 142
+             357:          83 Load 356
+             358:          83 Load 259(gRotMat)
+             359:          83 MatrixTimesMatrix 357 358
+             360:   81(fvec4) CompositeExtract 359 0
+             361:   31(fvec3) VectorShuffle 360 360 0 1 2
+             362:   81(fvec4) CompositeExtract 359 1
+             363:   31(fvec3) VectorShuffle 362 362 0 1 2
+             364:   81(fvec4) CompositeExtract 359 2
+             365:   31(fvec3) VectorShuffle 364 364 0 1 2
+             366:         126 CompositeConstruct 361 363 365
+             367:         126 Load 230(rotMat)
+             368:         126 ExtInst 3(GLSL.std.450) 34(MatrixInverse) 367
+             369:         126 MatrixTimesMatrix 366 368
+             373:   31(fvec3) Load 370(inNormal)
+             374:   31(fvec3) MatrixTimesVector 369 373
+                              Store 353(outNormal) 374
+             375:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 376 376 12 12
+             377:    339(ptr) AccessChain 103(ubo) 142
+             378:          83 Load 377
+             379:   31(fvec3) Load 289(inPos)
+             380:   31(fvec3) Load 312(instancePos)
+             381:   31(fvec3) FAdd 379 380
+             382:   28(float) CompositeExtract 381 0
+             383:   28(float) CompositeExtract 381 1
+             384:   28(float) CompositeExtract 381 2
+             385:   81(fvec4) CompositeConstruct 382 383 384 151
+             386:   81(fvec4) MatrixTimesVector 378 385
+                              Store 301(pos) 386
+             387:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 388 388 12 12
+             392:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 390 389(lPos) 74
+             393:    339(ptr) AccessChain 103(ubo) 142
+             394:          83 Load 393
+             395:   81(fvec4) CompositeExtract 394 0
+             396:   31(fvec3) VectorShuffle 395 395 0 1 2
+             397:   81(fvec4) CompositeExtract 394 1
+             398:   31(fvec3) VectorShuffle 397 397 0 1 2
+             399:   81(fvec4) CompositeExtract 394 2
+             400:   31(fvec3) VectorShuffle 399 399 0 1 2
+             401:         126 CompositeConstruct 396 398 400
+             403:    402(ptr) AccessChain 103(ubo) 150
+             404:   81(fvec4) Load 403
+             405:   31(fvec3) VectorShuffle 404 404 0 1 2
+             406:   31(fvec3) MatrixTimesVector 401 405
+                              Store 389(lPos) 406
+             407:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 408 408 12 12
+             412:   31(fvec3) Load 389(lPos)
+             413:   81(fvec4) Load 301(pos)
+             414:   31(fvec3) VectorShuffle 413 413 0 1 2
+             415:   31(fvec3) FSub 412 414
+                              Store 409(outLightVec) 415
+             416:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 417 417 12 12
+             421:   81(fvec4) Load 301(pos)
+             422:   31(fvec3) VectorShuffle 421 421 0 1 2
+             423:   31(fvec3) FNegate 422
+                              Store 418(outViewVec) 423
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.comp.out b/Test/baseResults/spv.debuginfo.hlsl.comp.out
index 44bf1a7..b427c61 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.comp.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.comp.out
@@ -1,1081 +1,1235 @@
 spv.debuginfo.hlsl.comp
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 833
+// Id's are bound by 976
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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"
+                              EntryPoint GLCompute 6  "main" 971
+                              ExecutionMode 6 LocalSize 10 10 1
+               1:             String  ""
+              10:             String  "float"
+              13:             String  "uint"
+              28:             String  "springForce"
+              31:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+              40:             String  "p0"
+              44:             String  "p1"
+              48:             String  "restDist"
+              57:             String  "@main"
+              63:             String  "id"
+              71:             String  "dist"
+              83:             String  "int"
+              89:             String  "sphereRadius"
+             100:             String  "gravity"
+             105:             String  "particleCount"
+             108:             String  "UBO"
+             111:             String  "params"
+             115:             String  "ubo"
+             140:             String  "index"
+             163:             String  "bool"
+             177:             String  "normal"
+             184:             String  "pinned"
+             188:             String  "Particle"
+             193:             String  "@data"
+             197:             String  "particleIn"
+             219:             String  "particleOut"
+             244:             String  "force"
+             257:             String  "pos"
+             267:             String  "vel"
+             567:             String  "f"
+             616:             String  "sphereDist"
+             669:             String  "calculateNormals"
+             673:             String  "PushConstants"
+             676:             String  "pushConstants"
+             679:             String  "$Global"
+             719:             String  "a"
+             732:             String  "b"
+             749:             String  "c"
+                              Name 6  "main"
+                              Name 27  "springForce(vf3;vf3;f1;"
+                              Name 24  "p0"
+                              Name 25  "p1"
+                              Name 26  "restDist"
+                              Name 56  "@main(vu3;"
+                              Name 55  "id"
+                              Name 69  "dist"
+                              Name 87  "UBO"
+                              MemberName 87(UBO) 0  "deltaT"
+                              MemberName 87(UBO) 1  "particleMass"
+                              MemberName 87(UBO) 2  "springStiffness"
+                              MemberName 87(UBO) 3  "damping"
+                              MemberName 87(UBO) 4  "restDistH"
+                              MemberName 87(UBO) 5  "restDistV"
+                              MemberName 87(UBO) 6  "restDistD"
+                              MemberName 87(UBO) 7  "sphereRadius"
+                              MemberName 87(UBO) 8  "spherePos"
+                              MemberName 87(UBO) 9  "gravity"
+                              MemberName 87(UBO) 10  "particleCount"
+                              Name 109  "ubo"
+                              MemberName 109(ubo) 0  "params"
+                              Name 117  ""
+                              Name 138  "index"
+                              Name 175  "Particle"
+                              MemberName 175(Particle) 0  "pos"
+                              MemberName 175(Particle) 1  "vel"
+                              MemberName 175(Particle) 2  "uv"
+                              MemberName 175(Particle) 3  "normal"
+                              MemberName 175(Particle) 4  "pinned"
+                              Name 191  "particleIn"
+                              MemberName 191(particleIn) 0  "@data"
+                              Name 199  "particleIn"
+                              Name 215  "particleOut"
+                              MemberName 215(particleOut) 0  "@data"
+                              Name 221  "particleOut"
+                              Name 242  "force"
+                              Name 255  "pos"
+                              Name 265  "vel"
                               Name 286  "param"
-                              Name 288  "param"
-                              Name 310  "param"
-                              Name 314  "param"
+                              Name 290  "param"
+                              Name 292  "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)
+                              Name 320  "param"
+                              Name 322  "param"
+                              Name 350  "param"
+                              Name 354  "param"
+                              Name 356  "param"
+                              Name 379  "param"
+                              Name 383  "param"
+                              Name 385  "param"
+                              Name 420  "param"
+                              Name 424  "param"
+                              Name 426  "param"
+                              Name 456  "param"
+                              Name 460  "param"
+                              Name 462  "param"
+                              Name 500  "param"
+                              Name 504  "param"
+                              Name 506  "param"
+                              Name 540  "param"
+                              Name 544  "param"
+                              Name 546  "param"
+                              Name 565  "f"
+                              Name 614  "sphereDist"
+                              Name 667  "PushConstants"
+                              MemberName 667(PushConstants) 0  "calculateNormals"
+                              Name 674  "$Global"
+                              MemberName 674($Global) 0  "pushConstants"
+                              Name 681  ""
+                              Name 693  "normal"
+                              Name 717  "a"
+                              Name 730  "b"
+                              Name 747  "c"
+                              Name 969  "id"
+                              Name 971  "id"
+                              Name 973  "param"
+                              MemberDecorate 87(UBO) 0 Offset 0
+                              MemberDecorate 87(UBO) 1 Offset 4
+                              MemberDecorate 87(UBO) 2 Offset 8
+                              MemberDecorate 87(UBO) 3 Offset 12
+                              MemberDecorate 87(UBO) 4 Offset 16
+                              MemberDecorate 87(UBO) 5 Offset 20
+                              MemberDecorate 87(UBO) 6 Offset 24
+                              MemberDecorate 87(UBO) 7 Offset 28
+                              MemberDecorate 87(UBO) 8 Offset 32
+                              MemberDecorate 87(UBO) 9 Offset 48
+                              MemberDecorate 87(UBO) 10 Offset 64
+                              MemberDecorate 109(ubo) 0 Offset 0
+                              Decorate 109(ubo) Block
+                              Decorate 117 DescriptorSet 0
+                              Decorate 117 Binding 2
+                              MemberDecorate 175(Particle) 0 Offset 0
+                              MemberDecorate 175(Particle) 1 Offset 16
+                              MemberDecorate 175(Particle) 2 Offset 32
+                              MemberDecorate 175(Particle) 3 Offset 48
+                              MemberDecorate 175(Particle) 4 Offset 64
+                              Decorate 189 ArrayStride 80
+                              MemberDecorate 191(particleIn) 0 NonWritable
+                              MemberDecorate 191(particleIn) 0 Offset 0
+                              Decorate 191(particleIn) BufferBlock
+                              Decorate 199(particleIn) DescriptorSet 0
+                              Decorate 199(particleIn) Binding 0
+                              Decorate 213 ArrayStride 80
+                              MemberDecorate 215(particleOut) 0 Offset 0
+                              Decorate 215(particleOut) BufferBlock
+                              Decorate 221(particleOut) DescriptorSet 0
+                              Decorate 221(particleOut) Binding 1
+                              MemberDecorate 667(PushConstants) 0 Offset 0
+                              MemberDecorate 674($Global) 0 Offset 0
+                              Decorate 674($Global) Block
+                              Decorate 681 DescriptorSet 0
+                              Decorate 681 Binding 3
+                              Decorate 971(id) BuiltIn GlobalInvocationId
+               4:             TypeVoid
+               5:             TypeFunction 4
+               8:             TypeFloat 32
+              11:             TypeInt 32 0
+              14:     11(int) Constant 32
+              15:     11(int) Constant 6
+              16:     11(int) Constant 0
+              12:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 13 14 15 16
+              17:     11(int) Constant 3
+               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 10 14 17 16
+              18:             TypeVector 8(float) 3
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 17
+              20:             TypePointer Function 18(fvec3)
+              21:             TypePointer Function 8(float)
+              22:             TypeFunction 18(fvec3) 20(ptr) 20(ptr) 21(ptr)
+              23:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 19 19 19 9
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 31
+              33:     11(int) Constant 1
+              34:     11(int) Constant 4
+              35:     11(int) Constant 5
+              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 33 34 30 35
+              29:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 28 23 30 16 16 32 28 17 16
+              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 40 19 30 16 16 29 34 33
+              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              45:     11(int) Constant 2
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 44 19 30 16 16 29 34 45
+              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 9 30 16 16 29 34 17
+              50:             TypeVector 11(int) 3
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 12 17
+              52:             TypePointer Function 50(ivec3)
+              53:             TypeFunction 4 52(ptr)
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 51
+              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 57 54 30 16 16 32 57 17 16
+              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 63 51 30 16 16 58 34 33
+              68:     11(int) Constant 76
+              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 71 19 30 68 16 29 34
+              77:     11(int) Constant 77
+              80:             TypeVector 8(float) 4
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 34
+              82:             TypeInt 32 1
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 83 14 34 16
+              85:             TypeVector 82(int) 2
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 84 45
+         87(UBO):             TypeStruct 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 80(fvec4) 80(fvec4) 85(ivec2)
+              90:     11(int) Constant 48
+              91:     11(int) Constant 20
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 9 30 90 91 16 16 17
+             101:     11(int) Constant 50
+             102:     11(int) Constant 16
+              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 81 30 101 102 16 16 17
+             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 81 30 101 102 16 16 17
+             106:     11(int) Constant 51
+             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 105 86 30 106 91 16 16 17
+             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 108 33 30 77 16 32 108 16 17 88 92 93 94 95 96 97 98 99 103 104
+        109(ubo):             TypeStruct 87(UBO)
+             112:     11(int) Constant 56
+             113:     11(int) Constant 12
+             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 111 107 30 112 113 16 16 17
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 115 33 30 77 16 32 115 16 17 110
+             116:             TypePointer Uniform 109(ubo)
+             117:    116(ptr) Variable Uniform
+             119:     11(int) Constant 8
+             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 114 30 77 16 32 1 117 119
+             120:     82(int) Constant 0
+             121:     82(int) Constant 2
+             122:             TypePointer Uniform 8(float)
+             136:     11(int) Constant 83
+             137:             TypePointer Function 11(int)
+             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 140 12 30 136 16 58 34
+             144:     82(int) Constant 10
+             145:             TypePointer Uniform 82(int)
+             154:     11(int) Constant 84
+             162:             TypeBool
+             164:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             170:     11(int) Constant 85
+             174:     11(int) Constant 88
+   175(Particle):             TypeStruct 80(fvec4) 80(fvec4) 80(fvec4) 80(fvec4) 8(float)
+             178:     11(int) Constant 30
+             179:     11(int) Constant 15
+             176:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
+             181:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
+             182:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
+             185:     11(int) Constant 31
+             186:     11(int) Constant 14
+             183:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 184 9 30 185 186 16 16 17
+             187:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 188 33 30 174 16 32 188 16 17 176 180 181 182 183
+             189:             TypeRuntimeArray 175(Particle)
+             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 16
+ 191(particleIn):             TypeStruct 189
+             194:     11(int) Constant 35
+             195:     11(int) Constant 28
+             192:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 193 190 30 194 195 16 16 17
+             196:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 197 33 30 174 16 32 197 16 17 192
+             198:             TypePointer Uniform 191(particleIn)
+ 199(particleIn):    198(ptr) Variable Uniform
+             200:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 197 196 30 174 16 32 197 199(particleIn) 119
+             202:     82(int) Constant 4
+             205:    8(float) Constant 1065353216
+             206:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             212:     11(int) Constant 89
+             213:             TypeRuntimeArray 175(Particle)
+             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 16
+215(particleOut):             TypeStruct 213
+             217:     11(int) Constant 37
+             216:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 193 214 30 217 178 16 16 17
+             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 219 33 30 212 16 32 219 16 17 216
+             220:             TypePointer Uniform 215(particleOut)
+221(particleOut):    220(ptr) Variable Uniform
+             222:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 219 218 30 212 16 32 219 221(particleOut) 119
+             225:             TypePointer Uniform 80(fvec4)
+             230:     11(int) Constant 90
+             232:     82(int) Constant 1
+             233:    8(float) Constant 0
+             234:   80(fvec4) ConstantComposite 233 233 233 233
+             237:     11(int) Constant 91
+             241:     11(int) Constant 95
+             243:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 244 19 30 241 16 58 34
+             246:     82(int) Constant 9
+             254:     11(int) Constant 97
+             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 257 19 30 254 16 58 34
+             264:     11(int) Constant 98
+             266:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 267 19 30 264 16 58 34
+             274:     11(int) Constant 102
+             277:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             283:     11(int) Constant 103
+             300:     11(int) Constant 106
+             307:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             313:     11(int) Constant 107
+             330:     11(int) Constant 110
+             337:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             343:     11(int) Constant 111
+             349:     82(int) Constant 5
+             364:     11(int) Constant 114
+             367:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             373:     11(int) Constant 115
+             393:     11(int) Constant 118
+             396:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             406:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             412:     11(int) Constant 119
+             419:     82(int) Constant 6
+             434:     11(int) Constant 122
+             437:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             441:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             443:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             449:     11(int) Constant 123
+             470:     11(int) Constant 126
+             477:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             485:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             487:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             493:     11(int) Constant 127
+             514:     11(int) Constant 130
+             521:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             525:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             527:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             533:     11(int) Constant 131
+             554:     11(int) Constant 134
+             555:     82(int) Constant 3
+             564:     11(int) Constant 137
+             566:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 567 19 30 564 16 58 34
+             575:     11(int) Constant 138
+             583:    8(float) Constant 1056964608
+             599:     11(int) Constant 139
+             613:     11(int) Constant 142
+             615:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 616 19 30 613 16 58 34
+             622:     82(int) Constant 8
+             628:     11(int) Constant 143
+             631:     82(int) Constant 7
+             634:    8(float) Constant 1008981770
+             636:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             642:     11(int) Constant 145
+             661:     11(int) Constant 147
+             666:     11(int) Constant 151
+667(PushConstants):             TypeStruct 11(int)
+             670:     11(int) Constant 67
+             671:     11(int) Constant 23
+             668:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 669 12 30 670 671 16 16 17
+             672:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 673 33 30 666 16 32 673 16 17 668
+    674($Global):             TypeStruct 667(PushConstants)
+             677:     11(int) Constant 71
+             675:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 676 672 30 677 179 16 16 17
+             678:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 679 33 30 666 16 32 679 16 17 675
+             680:             TypePointer Uniform 674($Global)
+             681:    680(ptr) Variable Uniform
+             682:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 678 30 666 16 32 1 681 119
+             683:             TypePointer Uniform 11(int)
+             686:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             692:     11(int) Constant 152
+             694:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 177 19 30 692 16 58 34
+             696:   18(fvec3) ConstantComposite 233 233 233
+             698:     11(int) Constant 154
+             701:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             707:     11(int) Constant 155
+             710:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             716:     11(int) Constant 156
+             718:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 719 19 30 716 16 58 34
+             729:     11(int) Constant 157
+             731:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 732 19 30 729 16 58 34
+             746:     11(int) Constant 158
+             748:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 749 19 30 746 16 58 34
+             762:     11(int) Constant 159
+             774:     11(int) Constant 161
+             781:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             787:     11(int) Constant 162
+             799:     11(int) Constant 163
+             812:     11(int) Constant 164
+             821:     11(int) Constant 165
+             833:     11(int) Constant 168
+             840:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             846:     11(int) Constant 169
+             849:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             855:     11(int) Constant 170
+             867:     11(int) Constant 171
+             880:     11(int) Constant 172
+             889:     11(int) Constant 173
+             901:     11(int) Constant 175
+             908:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
+             914:     11(int) Constant 176
+             923:     11(int) Constant 177
+             936:     11(int) Constant 178
+             948:     11(int) Constant 179
+             960:     11(int) Constant 182
+             970:             TypePointer Input 50(ivec3)
+         971(id):    970(ptr) Variable Input
+                              Line 1 82 1
+         6(main):           4 Function None 5
+               7:             Label
+         969(id):     52(ptr) Variable Function
+      973(param):     52(ptr) Variable Function
+                              Line 1 82 0
+             972:   50(ivec3) Load 971(id)
+                              Store 969(id) 972
+             974:   50(ivec3) Load 969(id)
+                              Store 973(param) 974
+             975:           4 FunctionCall 56(@main(vu3;) 973(param)
                               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
+                              Line 1 75 1
+27(springForce(vf3;vf3;f1;):   18(fvec3) Function None 22
+          24(p0):     20(ptr) FunctionParameter
+          25(p1):     20(ptr) FunctionParameter
+    26(restDist):     21(ptr) FunctionParameter
+              36:             Label
+        69(dist):     20(ptr) Variable Function
+              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29
+              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 16 16 16 16
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 39 24(p0) 42
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 43 25(p1) 42
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 47 26(restDist) 42
+              65:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 29 27(springForce(vf3;vf3;f1;)
+              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 68 68 16 16
+              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 70 69(dist) 42
+              73:   18(fvec3) Load 24(p0)
+              74:   18(fvec3) Load 25(p1)
+              75:   18(fvec3) FSub 73 74
+                              Store 69(dist) 75
+              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 77 77 16 16
+              78:   18(fvec3) Load 69(dist)
+              79:   18(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 78
+             123:    122(ptr) AccessChain 117 120 121
+             124:    8(float) Load 123
+             125:   18(fvec3) VectorTimesScalar 79 124
+             126:   18(fvec3) Load 69(dist)
+             127:    8(float) ExtInst 3(GLSL.std.450) 66(Length) 126
+             128:    8(float) Load 26(restDist)
+             129:    8(float) FSub 127 128
+             130:   18(fvec3) VectorTimesScalar 125 129
+                              ReturnValue 130
                               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
+                              Line 1 82 1
+  56(@main(vu3;):           4 Function None 53
+          55(id):     52(ptr) FunctionParameter
+              59:             Label
+      138(index):    137(ptr) Variable Function
+      242(force):     20(ptr) Variable Function
+        255(pos):     20(ptr) Variable Function
+        265(vel):     20(ptr) Variable Function
+      286(param):     20(ptr) Variable Function
+      290(param):     20(ptr) Variable Function
+      292(param):     21(ptr) Variable Function
       316(param):     20(ptr) Variable Function
-      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
+      320(param):     20(ptr) Variable Function
+      322(param):     21(ptr) Variable Function
+      350(param):     20(ptr) Variable Function
+      354(param):     20(ptr) Variable Function
+      356(param):     21(ptr) Variable Function
+      379(param):     20(ptr) Variable Function
+      383(param):     20(ptr) Variable Function
+      385(param):     21(ptr) Variable Function
+      420(param):     20(ptr) Variable Function
+      424(param):     20(ptr) Variable Function
+      426(param):     21(ptr) Variable Function
+      456(param):     20(ptr) Variable Function
+      460(param):     20(ptr) Variable Function
+      462(param):     21(ptr) Variable Function
+      500(param):     20(ptr) Variable Function
+      504(param):     20(ptr) Variable Function
+      506(param):     21(ptr) Variable Function
+      540(param):     20(ptr) Variable Function
+      544(param):     20(ptr) Variable Function
+      546(param):     21(ptr) Variable Function
+          565(f):     20(ptr) Variable Function
+ 614(sphereDist):     20(ptr) Variable Function
+     693(normal):     20(ptr) Variable Function
+          717(a):     20(ptr) Variable Function
+          730(b):     20(ptr) Variable Function
+          747(c):     20(ptr) Variable Function
+              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 16 16 16 16
+              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 62 55(id) 42
+             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 58 56(@main(vu3;)
+             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             135:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 136 136 16 16
+             141:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 139 138(index) 42
+             142:    137(ptr) AccessChain 55(id) 33
+             143:     11(int) Load 142
+             146:    145(ptr) AccessChain 117 120 144 16
+             147:     82(int) Load 146
+             148:     11(int) Bitcast 147
+             149:     11(int) IMul 143 148
+             150:    137(ptr) AccessChain 55(id) 16
+             151:     11(int) Load 150
+             152:     11(int) IAdd 149 151
+                              Store 138(index) 152
+             153:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 154 154 16 16
+             155:     11(int) Load 138(index)
+             156:    145(ptr) AccessChain 117 120 144 16
+             157:     82(int) Load 156
+             158:    145(ptr) AccessChain 117 120 144 33
+             159:     82(int) Load 158
+             160:     82(int) IMul 157 159
+             161:     11(int) Bitcast 160
+             165:   162(bool) UGreaterThan 155 161
+                              SelectionMerge 167 None
+                              BranchConditional 165 166 167
+             166:               Label
+             168:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             169:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 170 170 16 16
                                 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
+             167:             Label
+             172:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 174 174 16 16
+             201:     11(int) Load 138(index)
+             203:    122(ptr) AccessChain 199(particleIn) 120 201 202
+             204:    8(float) Load 203
+             207:   162(bool) FOrdEqual 204 205
+                              SelectionMerge 209 None
+                              BranchConditional 207 208 209
+             208:               Label
+             210:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             211:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 212 212 16 16
+             223:     11(int)   Load 138(index)
+             224:     11(int)   Load 138(index)
+             226:    225(ptr)   AccessChain 221(particleOut) 120 224 120
+             227:   80(fvec4)   Load 226
+             228:    225(ptr)   AccessChain 221(particleOut) 120 223 120
+                                Store 228 227
+             229:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 230 230 16 16
+             231:     11(int)   Load 138(index)
+             235:    225(ptr)   AccessChain 221(particleOut) 120 231 232
+                                Store 235 234
+             236:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 237 237 16 16
                                 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
+             209:             Label
+             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             240:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 241 241 16 16
+             245:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 243 242(force) 42
+             247:    225(ptr) AccessChain 117 120 246
+             248:   80(fvec4) Load 247
+             249:   18(fvec3) VectorShuffle 248 248 0 1 2
+             250:    122(ptr) AccessChain 117 120 232
+             251:    8(float) Load 250
+             252:   18(fvec3) VectorTimesScalar 249 251
+                              Store 242(force) 252
+             253:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 254 254 16 16
+             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 256 255(pos) 42
+             259:     11(int) Load 138(index)
+             260:    225(ptr) AccessChain 199(particleIn) 120 259 120
+             261:   80(fvec4) Load 260
+             262:   18(fvec3) VectorShuffle 261 261 0 1 2
+                              Store 255(pos) 262
+             263:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 264 264 16 16
+             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 266 265(vel) 42
+             269:     11(int) Load 138(index)
+             270:    225(ptr) AccessChain 199(particleIn) 120 269 232
+             271:   80(fvec4) Load 270
+             272:   18(fvec3) VectorShuffle 271 271 0 1 2
+                              Store 265(vel) 272
+             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 274 274 16 16
+             275:    137(ptr) AccessChain 55(id) 16
+             276:     11(int) Load 275
+             278:   162(bool) UGreaterThan 276 16
+                              SelectionMerge 280 None
+                              BranchConditional 278 279 280
+             279:               Label
+             281:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             282:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 283 283 16 16
+             284:     11(int)   Load 138(index)
+             285:     11(int)   ISub 284 33
+             287:    225(ptr)   AccessChain 199(particleIn) 120 285 120
+             288:   80(fvec4)   Load 287
+             289:   18(fvec3)   VectorShuffle 288 288 0 1 2
+                                Store 286(param) 289
+             291:   18(fvec3)   Load 255(pos)
+                                Store 290(param) 291
+             293:    122(ptr)   AccessChain 117 120 202
+             294:    8(float)   Load 293
+                                Store 292(param) 294
+             295:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 286(param) 290(param) 292(param)
+             296:   18(fvec3)   Load 242(force)
+             297:   18(fvec3)   FAdd 296 295
+                                Store 242(force) 297
+                                Branch 280
+             280:             Label
+             298:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 300 300 16 16
+             301:    137(ptr) AccessChain 55(id) 16
+             302:     11(int) Load 301
+             303:    145(ptr) AccessChain 117 120 144 16
+             304:     82(int) Load 303
+             305:     82(int) ISub 304 232
+             306:     11(int) Bitcast 305
+             308:   162(bool) ULessThan 302 306
+                              SelectionMerge 310 None
+                              BranchConditional 308 309 310
+             309:               Label
+             311:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             312:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 313 313 16 16
+             314:     11(int)   Load 138(index)
+             315:     11(int)   IAdd 314 33
+             317:    225(ptr)   AccessChain 199(particleIn) 120 315 120
+             318:   80(fvec4)   Load 317
+             319:   18(fvec3)   VectorShuffle 318 318 0 1 2
+                                Store 316(param) 319
+             321:   18(fvec3)   Load 255(pos)
+                                Store 320(param) 321
+             323:    122(ptr)   AccessChain 117 120 202
+             324:    8(float)   Load 323
+                                Store 322(param) 324
+             325:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 316(param) 320(param) 322(param)
+             326:   18(fvec3)   Load 242(force)
+             327:   18(fvec3)   FAdd 326 325
+                                Store 242(force) 327
+                                Branch 310
+             310:             Label
+             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 330 330 16 16
+             331:    137(ptr) AccessChain 55(id) 33
+             332:     11(int) Load 331
+             333:    145(ptr) AccessChain 117 120 144 33
+             334:     82(int) Load 333
+             335:     82(int) ISub 334 232
+             336:     11(int) Bitcast 335
+             338:   162(bool) ULessThan 332 336
+                              SelectionMerge 340 None
+                              BranchConditional 338 339 340
+             339:               Label
+             341:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             342:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 343 343 16 16
+             344:     11(int)   Load 138(index)
+             345:    145(ptr)   AccessChain 117 120 144 16
+             346:     82(int)   Load 345
+             347:     11(int)   Bitcast 346
+             348:     11(int)   IAdd 344 347
+             351:    225(ptr)   AccessChain 199(particleIn) 120 348 120
+             352:   80(fvec4)   Load 351
+             353:   18(fvec3)   VectorShuffle 352 352 0 1 2
+                                Store 350(param) 353
+             355:   18(fvec3)   Load 255(pos)
+                                Store 354(param) 355
+             357:    122(ptr)   AccessChain 117 120 349
+             358:    8(float)   Load 357
+                                Store 356(param) 358
+             359:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 350(param) 354(param) 356(param)
+             360:   18(fvec3)   Load 242(force)
+             361:   18(fvec3)   FAdd 360 359
+                                Store 242(force) 361
+                                Branch 340
+             340:             Label
+             362:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             363:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 364 364 16 16
+             365:    137(ptr) AccessChain 55(id) 33
+             366:     11(int) Load 365
+             368:   162(bool) UGreaterThan 366 16
+                              SelectionMerge 370 None
+                              BranchConditional 368 369 370
+             369:               Label
+             371:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             372:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 373 373 16 16
+             374:     11(int)   Load 138(index)
+             375:    145(ptr)   AccessChain 117 120 144 16
+             376:     82(int)   Load 375
+             377:     11(int)   Bitcast 376
+             378:     11(int)   ISub 374 377
+             380:    225(ptr)   AccessChain 199(particleIn) 120 378 120
+             381:   80(fvec4)   Load 380
+             382:   18(fvec3)   VectorShuffle 381 381 0 1 2
+                                Store 379(param) 382
+             384:   18(fvec3)   Load 255(pos)
+                                Store 383(param) 384
+             386:    122(ptr)   AccessChain 117 120 349
+             387:    8(float)   Load 386
+                                Store 385(param) 387
+             388:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 379(param) 383(param) 385(param)
+             389:   18(fvec3)   Load 242(force)
+             390:   18(fvec3)   FAdd 389 388
+                                Store 242(force) 390
+                                Branch 370
+             370:             Label
+             391:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             392:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 393 393 16 16
+             394:    137(ptr) AccessChain 55(id) 16
+             395:     11(int) Load 394
+             397:   162(bool) UGreaterThan 395 16
+             398:    137(ptr) AccessChain 55(id) 33
+             399:     11(int) Load 398
+             400:    145(ptr) AccessChain 117 120 144 33
+             401:     82(int) Load 400
+             402:     82(int) ISub 401 232
+             403:     11(int) Bitcast 402
+             405:   162(bool) ULessThan 399 403
+             407:   162(bool) LogicalAnd 397 405
+                              SelectionMerge 409 None
+                              BranchConditional 407 408 409
+             408:               Label
+             410:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             411:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 412 412 16 16
+             413:     11(int)   Load 138(index)
+             414:    145(ptr)   AccessChain 117 120 144 16
+             415:     82(int)   Load 414
+             416:     11(int)   Bitcast 415
+             417:     11(int)   IAdd 413 416
+             418:     11(int)   ISub 417 33
+             421:    225(ptr)   AccessChain 199(particleIn) 120 418 120
+             422:   80(fvec4)   Load 421
+             423:   18(fvec3)   VectorShuffle 422 422 0 1 2
+                                Store 420(param) 423
+             425:   18(fvec3)   Load 255(pos)
+                                Store 424(param) 425
+             427:    122(ptr)   AccessChain 117 120 419
+             428:    8(float)   Load 427
+                                Store 426(param) 428
+             429:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 420(param) 424(param) 426(param)
+             430:   18(fvec3)   Load 242(force)
+             431:   18(fvec3)   FAdd 430 429
+                                Store 242(force) 431
+                                Branch 409
+             409:             Label
+             432:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             433:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 434 434 16 16
+             435:    137(ptr) AccessChain 55(id) 16
+             436:     11(int) Load 435
+             438:   162(bool) UGreaterThan 436 16
+             439:    137(ptr) AccessChain 55(id) 33
+             440:     11(int) Load 439
+             442:   162(bool) UGreaterThan 440 16
+             444:   162(bool) LogicalAnd 438 442
+                              SelectionMerge 446 None
+                              BranchConditional 444 445 446
+             445:               Label
+             447:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             448:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 449 449 16 16
+             450:     11(int)   Load 138(index)
+             451:    145(ptr)   AccessChain 117 120 144 16
+             452:     82(int)   Load 451
+             453:     11(int)   Bitcast 452
+             454:     11(int)   ISub 450 453
+             455:     11(int)   ISub 454 33
+             457:    225(ptr)   AccessChain 199(particleIn) 120 455 120
+             458:   80(fvec4)   Load 457
+             459:   18(fvec3)   VectorShuffle 458 458 0 1 2
+                                Store 456(param) 459
+             461:   18(fvec3)   Load 255(pos)
+                                Store 460(param) 461
+             463:    122(ptr)   AccessChain 117 120 419
+             464:    8(float)   Load 463
+                                Store 462(param) 464
+             465:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 456(param) 460(param) 462(param)
+             466:   18(fvec3)   Load 242(force)
+             467:   18(fvec3)   FAdd 466 465
+                                Store 242(force) 467
+                                Branch 446
+             446:             Label
+             468:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             469:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 470 470 16 16
+             471:    137(ptr) AccessChain 55(id) 16
+             472:     11(int) Load 471
+             473:    145(ptr) AccessChain 117 120 144 16
+             474:     82(int) Load 473
+             475:     82(int) ISub 474 232
+             476:     11(int) Bitcast 475
+             478:   162(bool) ULessThan 472 476
+             479:    137(ptr) AccessChain 55(id) 33
+             480:     11(int) Load 479
+             481:    145(ptr) AccessChain 117 120 144 33
+             482:     82(int) Load 481
+             483:     82(int) ISub 482 232
+             484:     11(int) Bitcast 483
+             486:   162(bool) ULessThan 480 484
+             488:   162(bool) LogicalAnd 478 486
+                              SelectionMerge 490 None
+                              BranchConditional 488 489 490
+             489:               Label
+             491:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             492:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 493 493 16 16
+             494:     11(int)   Load 138(index)
+             495:    145(ptr)   AccessChain 117 120 144 16
+             496:     82(int)   Load 495
+             497:     11(int)   Bitcast 496
+             498:     11(int)   IAdd 494 497
+             499:     11(int)   IAdd 498 33
+             501:    225(ptr)   AccessChain 199(particleIn) 120 499 120
+             502:   80(fvec4)   Load 501
+             503:   18(fvec3)   VectorShuffle 502 502 0 1 2
+                                Store 500(param) 503
+             505:   18(fvec3)   Load 255(pos)
+                                Store 504(param) 505
+             507:    122(ptr)   AccessChain 117 120 419
+             508:    8(float)   Load 507
+                                Store 506(param) 508
+             509:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 500(param) 504(param) 506(param)
+             510:   18(fvec3)   Load 242(force)
+             511:   18(fvec3)   FAdd 510 509
+                                Store 242(force) 511
+                                Branch 490
+             490:             Label
+             512:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             513:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 514 514 16 16
+             515:    137(ptr) AccessChain 55(id) 16
+             516:     11(int) Load 515
+             517:    145(ptr) AccessChain 117 120 144 16
+             518:     82(int) Load 517
+             519:     82(int) ISub 518 232
+             520:     11(int) Bitcast 519
+             522:   162(bool) ULessThan 516 520
+             523:    137(ptr) AccessChain 55(id) 33
+             524:     11(int) Load 523
+             526:   162(bool) UGreaterThan 524 16
+             528:   162(bool) LogicalAnd 522 526
+                              SelectionMerge 530 None
+                              BranchConditional 528 529 530
+             529:               Label
+             531:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             532:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 533 533 16 16
+             534:     11(int)   Load 138(index)
+             535:    145(ptr)   AccessChain 117 120 144 16
+             536:     82(int)   Load 535
+             537:     11(int)   Bitcast 536
+             538:     11(int)   ISub 534 537
+             539:     11(int)   IAdd 538 33
+             541:    225(ptr)   AccessChain 199(particleIn) 120 539 120
+             542:   80(fvec4)   Load 541
+             543:   18(fvec3)   VectorShuffle 542 542 0 1 2
+                                Store 540(param) 543
+             545:   18(fvec3)   Load 255(pos)
+                                Store 544(param) 545
+             547:    122(ptr)   AccessChain 117 120 419
+             548:    8(float)   Load 547
+                                Store 546(param) 548
+             549:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 540(param) 544(param) 546(param)
+             550:   18(fvec3)   Load 242(force)
+             551:   18(fvec3)   FAdd 550 549
+                                Store 242(force) 551
+                                Branch 530
+             530:             Label
+             552:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             553:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 554 554 16 16
+             556:    122(ptr) AccessChain 117 120 555
+             557:    8(float) Load 556
+             558:    8(float) FNegate 557
+             559:   18(fvec3) Load 265(vel)
+             560:   18(fvec3) VectorTimesScalar 559 558
+             561:   18(fvec3) Load 242(force)
+             562:   18(fvec3) FAdd 561 560
+                              Store 242(force) 562
+             563:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 564 564 16 16
+             568:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 566 565(f) 42
+             569:   18(fvec3) Load 242(force)
+             570:    122(ptr) AccessChain 117 120 232
+             571:    8(float) Load 570
+             572:    8(float) FDiv 205 571
+             573:   18(fvec3) VectorTimesScalar 569 572
+                              Store 565(f) 573
+             574:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 575 575 16 16
+             576:     11(int) Load 138(index)
+             577:   18(fvec3) Load 255(pos)
+             578:   18(fvec3) Load 265(vel)
+             579:    122(ptr) AccessChain 117 120 120
+             580:    8(float) Load 579
+             581:   18(fvec3) VectorTimesScalar 578 580
+             582:   18(fvec3) FAdd 577 581
+             584:   18(fvec3) Load 565(f)
+             585:   18(fvec3) VectorTimesScalar 584 583
+             586:    122(ptr) AccessChain 117 120 120
+             587:    8(float) Load 586
+             588:   18(fvec3) VectorTimesScalar 585 587
+             589:    122(ptr) AccessChain 117 120 120
+             590:    8(float) Load 589
+             591:   18(fvec3) VectorTimesScalar 588 590
+             592:   18(fvec3) FAdd 582 591
+             593:    8(float) CompositeExtract 592 0
+             594:    8(float) CompositeExtract 592 1
+             595:    8(float) CompositeExtract 592 2
+             596:   80(fvec4) CompositeConstruct 593 594 595 205
+             597:    225(ptr) AccessChain 221(particleOut) 120 576 120
+                              Store 597 596
+             598:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 599 599 16 16
+             600:     11(int) Load 138(index)
+             601:   18(fvec3) Load 265(vel)
+             602:   18(fvec3) Load 565(f)
+             603:    122(ptr) AccessChain 117 120 120
+             604:    8(float) Load 603
+             605:   18(fvec3) VectorTimesScalar 602 604
+             606:   18(fvec3) FAdd 601 605
+             607:    8(float) CompositeExtract 606 0
+             608:    8(float) CompositeExtract 606 1
+             609:    8(float) CompositeExtract 606 2
+             610:   80(fvec4) CompositeConstruct 607 608 609 233
+             611:    225(ptr) AccessChain 221(particleOut) 120 600 232
+                              Store 611 610
+             612:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 613 613 16 16
+             617:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 615 614(sphereDist) 42
+             618:     11(int) Load 138(index)
+             619:    225(ptr) AccessChain 221(particleOut) 120 618 120
+             620:   80(fvec4) Load 619
+             621:   18(fvec3) VectorShuffle 620 620 0 1 2
+             623:    225(ptr) AccessChain 117 120 622
+             624:   80(fvec4) Load 623
+             625:   18(fvec3) VectorShuffle 624 624 0 1 2
+             626:   18(fvec3) FSub 621 625
+                              Store 614(sphereDist) 626
+             627:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 628 628 16 16
+             629:   18(fvec3) Load 614(sphereDist)
+             630:    8(float) ExtInst 3(GLSL.std.450) 66(Length) 629
+             632:    122(ptr) AccessChain 117 120 631
+             633:    8(float) Load 632
+             635:    8(float) FAdd 633 634
+             637:   162(bool) FOrdLessThan 630 635
+                              SelectionMerge 639 None
+                              BranchConditional 637 638 639
+             638:               Label
+             640:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             641:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 642 642 16 16
+             643:     11(int)   Load 138(index)
+             644:    225(ptr)   AccessChain 117 120 622
+             645:   80(fvec4)   Load 644
+             646:   18(fvec3)   VectorShuffle 645 645 0 1 2
+             647:   18(fvec3)   Load 614(sphereDist)
+             648:   18(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 647
+             649:    122(ptr)   AccessChain 117 120 631
+             650:    8(float)   Load 649
+             651:    8(float)   FAdd 650 634
+             652:   18(fvec3)   VectorTimesScalar 648 651
+             653:   18(fvec3)   FAdd 646 652
+             654:    122(ptr)   AccessChain 221(particleOut) 120 643 120 16
+             655:    8(float)   CompositeExtract 653 0
+                                Store 654 655
+             656:    122(ptr)   AccessChain 221(particleOut) 120 643 120 33
+             657:    8(float)   CompositeExtract 653 1
+                                Store 656 657
+             658:    122(ptr)   AccessChain 221(particleOut) 120 643 120 45
+             659:    8(float)   CompositeExtract 653 2
+                                Store 658 659
+             660:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 661 661 16 16
+             662:     11(int)   Load 138(index)
+             663:    225(ptr)   AccessChain 221(particleOut) 120 662 232
+                                Store 663 234
+                                Branch 639
+             639:             Label
+             664:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             665:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 666 666 16 16
+             684:    683(ptr) AccessChain 681 120 120
+             685:     11(int) Load 684
+             687:   162(bool) IEqual 685 33
+                              SelectionMerge 689 None
+                              BranchConditional 687 688 689
+             688:               Label
+             690:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             691:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 692 692 16 16
+             695:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 694 693(normal) 42
+                                Store 693(normal) 696
+             697:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 698 698 16 16
+             699:    137(ptr)   AccessChain 55(id) 33
+             700:     11(int)   Load 699
+             702:   162(bool)   UGreaterThan 700 16
+                                SelectionMerge 704 None
+                                BranchConditional 702 703 704
+             703:                 Label
+             705:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             706:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 707 707 16 16
+             708:    137(ptr)     AccessChain 55(id) 16
+             709:     11(int)     Load 708
+             711:   162(bool)     UGreaterThan 709 16
+                                  SelectionMerge 713 None
+                                  BranchConditional 711 712 713
+             712:                   Label
+             714:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             715:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 716 716 16 16
+             720:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 718 717(a) 42
+             721:     11(int)       Load 138(index)
+             722:     11(int)       ISub 721 33
+             723:    225(ptr)       AccessChain 199(particleIn) 120 722 120
+             724:   80(fvec4)       Load 723
+             725:   18(fvec3)       VectorShuffle 724 724 0 1 2
+             726:   18(fvec3)       Load 255(pos)
+             727:   18(fvec3)       FSub 725 726
+                                    Store 717(a) 727
+             728:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 729 729 16 16
+             733:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 731 730(b) 42
+             734:     11(int)       Load 138(index)
+             735:    145(ptr)       AccessChain 117 120 144 16
+             736:     82(int)       Load 735
+             737:     11(int)       Bitcast 736
+             738:     11(int)       ISub 734 737
+             739:     11(int)       ISub 738 33
+             740:    225(ptr)       AccessChain 199(particleIn) 120 739 120
+             741:   80(fvec4)       Load 740
+             742:   18(fvec3)       VectorShuffle 741 741 0 1 2
+             743:   18(fvec3)       Load 255(pos)
+             744:   18(fvec3)       FSub 742 743
+                                    Store 730(b) 744
+             745:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 746 746 16 16
+             750:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 748 747(c) 42
+             751:     11(int)       Load 138(index)
+             752:    145(ptr)       AccessChain 117 120 144 16
+             753:     82(int)       Load 752
+             754:     11(int)       Bitcast 753
+             755:     11(int)       ISub 751 754
+             756:    225(ptr)       AccessChain 199(particleIn) 120 755 120
+             757:   80(fvec4)       Load 756
+             758:   18(fvec3)       VectorShuffle 757 757 0 1 2
+             759:   18(fvec3)       Load 255(pos)
+             760:   18(fvec3)       FSub 758 759
+                                    Store 747(c) 760
+             761:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 762 762 16 16
+             763:   18(fvec3)       Load 717(a)
+             764:   18(fvec3)       Load 730(b)
+             765:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 763 764
+             766:   18(fvec3)       Load 730(b)
+             767:   18(fvec3)       Load 747(c)
+             768:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 766 767
+             769:   18(fvec3)       FAdd 765 768
+             770:   18(fvec3)       Load 693(normal)
+             771:   18(fvec3)       FAdd 770 769
+                                    Store 693(normal) 771
+                                    Branch 713
+             713:                 Label
+             772:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             773:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 774 774 16 16
+             775:    137(ptr)     AccessChain 55(id) 16
+             776:     11(int)     Load 775
+             777:    145(ptr)     AccessChain 117 120 144 16
+             778:     82(int)     Load 777
+             779:     82(int)     ISub 778 232
+             780:     11(int)     Bitcast 779
+             782:   162(bool)     ULessThan 776 780
+                                  SelectionMerge 784 None
+                                  BranchConditional 782 783 784
+             783:                   Label
+             785:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             786:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 787 787 16 16
+             788:     11(int)       Load 138(index)
+             789:    145(ptr)       AccessChain 117 120 144 16
+             790:     82(int)       Load 789
+             791:     11(int)       Bitcast 790
+             792:     11(int)       ISub 788 791
+             793:    225(ptr)       AccessChain 199(particleIn) 120 792 120
+             794:   80(fvec4)       Load 793
+             795:   18(fvec3)       VectorShuffle 794 794 0 1 2
+             796:   18(fvec3)       Load 255(pos)
+             797:   18(fvec3)       FSub 795 796
+                                    Store 717(a) 797
+             798:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 799 799 16 16
+             800:     11(int)       Load 138(index)
+             801:    145(ptr)       AccessChain 117 120 144 16
+             802:     82(int)       Load 801
+             803:     11(int)       Bitcast 802
+             804:     11(int)       ISub 800 803
+             805:     11(int)       IAdd 804 33
+             806:    225(ptr)       AccessChain 199(particleIn) 120 805 120
+             807:   80(fvec4)       Load 806
+             808:   18(fvec3)       VectorShuffle 807 807 0 1 2
+             809:   18(fvec3)       Load 255(pos)
+             810:   18(fvec3)       FSub 808 809
+                                    Store 730(b) 810
+             811:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 812 812 16 16
+             813:     11(int)       Load 138(index)
+             814:     11(int)       IAdd 813 33
+             815:    225(ptr)       AccessChain 199(particleIn) 120 814 120
+             816:   80(fvec4)       Load 815
+             817:   18(fvec3)       VectorShuffle 816 816 0 1 2
+             818:   18(fvec3)       Load 255(pos)
+             819:   18(fvec3)       FSub 817 818
+                                    Store 747(c) 819
+             820:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 821 821 16 16
+             822:   18(fvec3)       Load 717(a)
+             823:   18(fvec3)       Load 730(b)
+             824:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 822 823
+             825:   18(fvec3)       Load 730(b)
+             826:   18(fvec3)       Load 747(c)
+             827:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 825 826
+             828:   18(fvec3)       FAdd 824 827
+             829:   18(fvec3)       Load 693(normal)
+             830:   18(fvec3)       FAdd 829 828
+                                    Store 693(normal) 830
+                                    Branch 784
+             784:                 Label
+                                  Branch 704
+             704:               Label
+             831:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             832:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 833 833 16 16
+             834:    137(ptr)   AccessChain 55(id) 33
+             835:     11(int)   Load 834
+             836:    145(ptr)   AccessChain 117 120 144 33
+             837:     82(int)   Load 836
+             838:     82(int)   ISub 837 232
+             839:     11(int)   Bitcast 838
+             841:   162(bool)   ULessThan 835 839
+                                SelectionMerge 843 None
+                                BranchConditional 841 842 843
+             842:                 Label
+             844:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             845:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 846 846 16 16
+             847:    137(ptr)     AccessChain 55(id) 16
+             848:     11(int)     Load 847
+             850:   162(bool)     UGreaterThan 848 16
+                                  SelectionMerge 852 None
+                                  BranchConditional 850 851 852
+             851:                   Label
+             853:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             854:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 855 855 16 16
+             856:     11(int)       Load 138(index)
+             857:    145(ptr)       AccessChain 117 120 144 16
+             858:     82(int)       Load 857
+             859:     11(int)       Bitcast 858
+             860:     11(int)       IAdd 856 859
+             861:    225(ptr)       AccessChain 199(particleIn) 120 860 120
+             862:   80(fvec4)       Load 861
+             863:   18(fvec3)       VectorShuffle 862 862 0 1 2
+             864:   18(fvec3)       Load 255(pos)
+             865:   18(fvec3)       FSub 863 864
+                                    Store 717(a) 865
+             866:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 867 867 16 16
+             868:     11(int)       Load 138(index)
+             869:    145(ptr)       AccessChain 117 120 144 16
+             870:     82(int)       Load 869
+             871:     11(int)       Bitcast 870
+             872:     11(int)       IAdd 868 871
+             873:     11(int)       ISub 872 33
+             874:    225(ptr)       AccessChain 199(particleIn) 120 873 120
+             875:   80(fvec4)       Load 874
+             876:   18(fvec3)       VectorShuffle 875 875 0 1 2
+             877:   18(fvec3)       Load 255(pos)
+             878:   18(fvec3)       FSub 876 877
+                                    Store 730(b) 878
+             879:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 880 880 16 16
+             881:     11(int)       Load 138(index)
+             882:     11(int)       ISub 881 33
+             883:    225(ptr)       AccessChain 199(particleIn) 120 882 120
+             884:   80(fvec4)       Load 883
+             885:   18(fvec3)       VectorShuffle 884 884 0 1 2
+             886:   18(fvec3)       Load 255(pos)
+             887:   18(fvec3)       FSub 885 886
+                                    Store 747(c) 887
+             888:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 889 889 16 16
+             890:   18(fvec3)       Load 717(a)
+             891:   18(fvec3)       Load 730(b)
+             892:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 890 891
+             893:   18(fvec3)       Load 730(b)
+             894:   18(fvec3)       Load 747(c)
+             895:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 893 894
+             896:   18(fvec3)       FAdd 892 895
+             897:   18(fvec3)       Load 693(normal)
+             898:   18(fvec3)       FAdd 897 896
+                                    Store 693(normal) 898
+                                    Branch 852
+             852:                 Label
+             899:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             900:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 901 901 16 16
+             902:    137(ptr)     AccessChain 55(id) 16
+             903:     11(int)     Load 902
+             904:    145(ptr)     AccessChain 117 120 144 16
+             905:     82(int)     Load 904
+             906:     82(int)     ISub 905 232
+             907:     11(int)     Bitcast 906
+             909:   162(bool)     ULessThan 903 907
+                                  SelectionMerge 911 None
+                                  BranchConditional 909 910 911
+             910:                   Label
+             912:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             913:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 914 914 16 16
+             915:     11(int)       Load 138(index)
+             916:     11(int)       IAdd 915 33
+             917:    225(ptr)       AccessChain 199(particleIn) 120 916 120
+             918:   80(fvec4)       Load 917
+             919:   18(fvec3)       VectorShuffle 918 918 0 1 2
+             920:   18(fvec3)       Load 255(pos)
+             921:   18(fvec3)       FSub 919 920
+                                    Store 717(a) 921
+             922:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 923 923 16 16
+             924:     11(int)       Load 138(index)
+             925:    145(ptr)       AccessChain 117 120 144 16
+             926:     82(int)       Load 925
+             927:     11(int)       Bitcast 926
+             928:     11(int)       IAdd 924 927
+             929:     11(int)       IAdd 928 33
+             930:    225(ptr)       AccessChain 199(particleIn) 120 929 120
+             931:   80(fvec4)       Load 930
+             932:   18(fvec3)       VectorShuffle 931 931 0 1 2
+             933:   18(fvec3)       Load 255(pos)
+             934:   18(fvec3)       FSub 932 933
+                                    Store 730(b) 934
+             935:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 936 936 16 16
+             937:     11(int)       Load 138(index)
+             938:    145(ptr)       AccessChain 117 120 144 16
+             939:     82(int)       Load 938
+             940:     11(int)       Bitcast 939
+             941:     11(int)       IAdd 937 940
+             942:    225(ptr)       AccessChain 199(particleIn) 120 941 120
+             943:   80(fvec4)       Load 942
+             944:   18(fvec3)       VectorShuffle 943 943 0 1 2
+             945:   18(fvec3)       Load 255(pos)
+             946:   18(fvec3)       FSub 944 945
+                                    Store 747(c) 946
+             947:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 948 948 16 16
+             949:   18(fvec3)       Load 717(a)
+             950:   18(fvec3)       Load 730(b)
+             951:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 949 950
+             952:   18(fvec3)       Load 730(b)
+             953:   18(fvec3)       Load 747(c)
+             954:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 952 953
+             955:   18(fvec3)       FAdd 951 954
+             956:   18(fvec3)       Load 693(normal)
+             957:   18(fvec3)       FAdd 956 955
+                                    Store 693(normal) 957
+                                    Branch 911
+             911:                 Label
+                                  Branch 843
+             843:               Label
+             958:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+             959:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 960 960 16 16
+             961:     11(int)   Load 138(index)
+             962:   18(fvec3)   Load 693(normal)
+             963:   18(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 962
+             964:    8(float)   CompositeExtract 963 0
+             965:    8(float)   CompositeExtract 963 1
+             966:    8(float)   CompositeExtract 963 2
+             967:   80(fvec4)   CompositeConstruct 964 965 966 233
+             968:    225(ptr)   AccessChain 221(particleOut) 120 961 555
+                                Store 968 967
+                                Branch 689
+             689:             Label
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.frag.out b/Test/baseResults/spv.debuginfo.hlsl.frag.out
index 3c206a0..5dad549 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.frag.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.frag.out
@@ -1,987 +1,1143 @@
 spv.debuginfo.hlsl.frag
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 743
+// Id's are bound by 886
 
                               Capability Shader
                               Capability ImageQuery
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint Fragment 6  "main" 879 882
+                              ExecutionMode 6 OriginUpperLeft
+               1:             String  ""
+              10:             String  "float"
+              13:             String  "uint"
+              33:             String  "textureProj"
+              36:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+              44:             String  "P"
+              48:             String  "layer"
+              51:             String  "offset"
+              58:             String  "filterPCF"
+              64:             String  "sc"
+              76:             String  "shadow"
+              82:             String  "fragcolor"
+              85:             String  "fragPos"
+              91:             String  "@main"
+              97:             String  "inUV"
+             111:             String  "shadowCoord"
+             136:             String  "bool"
+             152:             String  "dist"
+             156:             String  "type.2d.image"
+             157:             String  "@type.2d.image"
+             162:             String  "textureShadowMap"
+             167:             String  "type.sampler"
+             168:             String  "@type.sampler"
+             172:             String  "samplerShadowMap"
+             176:             String  "type.sampled.image"
+             177:             String  "@type.sampled.image"
+             224:             String  "sizeQueryTemp"
+             229:             String  "int"
+             236:             String  "texDim"
+             250:             String  "elements"
+             257:             String  "levels"
+             266:             String  "scale"
+             273:             String  "dx"
+             285:             String  "dy"
+             297:             String  "shadowFactor"
+             303:             String  "count"
+             310:             String  "range"
+             317:             String  "x"
+             339:             String  "y"
+             403:             String  "i"
+             423:             String  "shadowClip"
+             435:             String  "color"
+             441:             String  "viewMatrix"
+             445:             String  "Light"
+             451:             String  "lights"
+             454:             String  "displayDebugTarget"
+             459:             String  "UBO"
+             462:             String  "ubo"
+             512:             String  "textureposition"
+             517:             String  "samplerposition"
+             529:             String  "normal"
+             533:             String  "textureNormal"
+             538:             String  "samplerNormal"
+             548:             String  "albedo"
+             552:             String  "textureAlbedo"
+             557:             String  "samplerAlbedo"
+             647:             String  "N"
+             673:             String  "L"
+             697:             String  "V"
+             712:             String  "lightCosInnerAngle"
+             719:             String  "lightCosOuterAngle"
+             726:             String  "lightRange"
+             733:             String  "dir"
+             749:             String  "cosDir"
+             758:             String  "spotEffect"
+             768:             String  "heightAttenuation"
+             777:             String  "NdotL"
+             787:             String  "diff"
+             795:             String  "R"
+             805:             String  "NdotR"
+             815:             String  "spec"
+                              Name 6  "main"
+                              Name 32  "textureProj(vf4;f1;vf2;"
+                              Name 29  "P"
+                              Name 30  "layer"
+                              Name 31  "offset"
+                              Name 57  "filterPCF(vf4;f1;"
+                              Name 55  "sc"
+                              Name 56  "layer"
+                              Name 75  "shadow(vf3;vf3;"
+                              Name 73  "fragcolor"
+                              Name 74  "fragPos"
+                              Name 90  "@main(vf2;"
+                              Name 89  "inUV"
+                              Name 103  "shadow"
+                              Name 109  "shadowCoord"
+                              Name 150  "dist"
+                              Name 160  "textureShadowMap"
+                              Name 170  "samplerShadowMap"
+                              Name 222  "sizeQueryTemp"
+                              Name 234  "texDim"
+                              Name 248  "elements"
+                              Name 255  "levels"
+                              Name 264  "scale"
+                              Name 271  "dx"
+                              Name 283  "dy"
+                              Name 295  "shadowFactor"
+                              Name 301  "count"
+                              Name 308  "range"
+                              Name 315  "x"
+                              Name 337  "y"
+                              Name 368  "param"
+                              Name 370  "param"
+                              Name 372  "param"
+                              Name 401  "i"
+                              Name 421  "shadowClip"
+                              Name 433  "Light"
+                              MemberName 433(Light) 0  "position"
+                              MemberName 433(Light) 1  "target"
+                              MemberName 433(Light) 2  "color"
+                              MemberName 433(Light) 3  "viewMatrix"
+                              Name 448  "UBO"
+                              MemberName 448(UBO) 0  "viewPos"
+                              MemberName 448(UBO) 1  "lights"
+                              MemberName 448(UBO) 2  "useShadows"
+                              MemberName 448(UBO) 3  "displayDebugTarget"
+                              Name 460  "ubo"
+                              MemberName 460(ubo) 0  "ubo"
+                              Name 467  ""
+                              Name 476  "shadowFactor"
+                              Name 481  "param"
+                              Name 483  "param"
+                              Name 504  "fragPos"
+                              Name 510  "textureposition"
+                              Name 515  "samplerposition"
+                              Name 527  "normal"
+                              Name 531  "textureNormal"
+                              Name 536  "samplerNormal"
+                              Name 546  "albedo"
+                              Name 550  "textureAlbedo"
+                              Name 555  "samplerAlbedo"
+                              Name 585  "fragcolor"
+                              Name 589  "param"
+                              Name 590  "param"
+                              Name 645  "N"
+                              Name 653  "i"
+                              Name 671  "L"
+                              Name 684  "dist"
+                              Name 695  "V"
+                              Name 710  "lightCosInnerAngle"
+                              Name 717  "lightCosOuterAngle"
+                              Name 724  "lightRange"
+                              Name 731  "dir"
+                              Name 747  "cosDir"
+                              Name 756  "spotEffect"
+                              Name 766  "heightAttenuation"
+                              Name 775  "NdotL"
+                              Name 785  "diff"
+                              Name 793  "R"
+                              Name 803  "NdotR"
+                              Name 813  "spec"
+                              Name 862  "param"
+                              Name 864  "param"
+                              Name 877  "inUV"
+                              Name 879  "inUV"
+                              Name 882  "@entryPointOutput"
+                              Name 883  "param"
+                              Decorate 160(textureShadowMap) DescriptorSet 0
+                              Decorate 160(textureShadowMap) Binding 5
+                              Decorate 170(samplerShadowMap) DescriptorSet 0
+                              Decorate 170(samplerShadowMap) Binding 5
+                              MemberDecorate 433(Light) 0 Offset 0
+                              MemberDecorate 433(Light) 1 Offset 16
+                              MemberDecorate 433(Light) 2 Offset 32
+                              MemberDecorate 433(Light) 3 RowMajor
+                              MemberDecorate 433(Light) 3 Offset 48
+                              MemberDecorate 433(Light) 3 MatrixStride 16
+                              Decorate 446 ArrayStride 112
+                              MemberDecorate 448(UBO) 0 Offset 0
+                              MemberDecorate 448(UBO) 1 Offset 16
+                              MemberDecorate 448(UBO) 2 Offset 352
+                              MemberDecorate 448(UBO) 3 Offset 356
+                              MemberDecorate 460(ubo) 0 Offset 0
+                              Decorate 460(ubo) Block
+                              Decorate 467 DescriptorSet 0
+                              Decorate 467 Binding 4
+                              Decorate 510(textureposition) DescriptorSet 0
+                              Decorate 510(textureposition) Binding 1
+                              Decorate 515(samplerposition) DescriptorSet 0
+                              Decorate 515(samplerposition) Binding 1
+                              Decorate 531(textureNormal) DescriptorSet 0
+                              Decorate 531(textureNormal) Binding 2
+                              Decorate 536(samplerNormal) DescriptorSet 0
+                              Decorate 536(samplerNormal) Binding 2
+                              Decorate 550(textureAlbedo) DescriptorSet 0
+                              Decorate 550(textureAlbedo) Binding 3
+                              Decorate 555(samplerAlbedo) DescriptorSet 0
+                              Decorate 555(samplerAlbedo) Binding 3
+                              Decorate 879(inUV) Location 0
+                              Decorate 882(@entryPointOutput) Location 0
+               4:             TypeVoid
+               5:             TypeFunction 4
+               8:             TypeFloat 32
+              11:             TypeInt 32 0
+              14:     11(int) Constant 32
+              15:     11(int) Constant 6
+              16:     11(int) Constant 0
+              12:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 13 14 15 16
+              17:     11(int) Constant 3
+               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 10 14 17 16
+              18:             TypeVector 8(float) 4
+              19:     11(int) Constant 4
+              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 19
+              21:             TypePointer Function 18(fvec4)
+              22:             TypePointer Function 8(float)
+              23:             TypeVector 8(float) 2
+              24:     11(int) Constant 2
+              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 24
+              26:             TypePointer Function 23(fvec2)
+              27:             TypeFunction 8(float) 21(ptr) 22(ptr) 26(ptr)
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 9 20 9 25
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 36
+              38:     11(int) Constant 1
+              39:     11(int) Constant 5
+              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 38 19 35 39
+              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 33 28 35 16 16 37 33 17 16
+              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 44 20 35 16 16 34 19 38
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 9 35 16 16 34 19 24
+              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 51 25 35 16 16 34 19 17
+              53:             TypeFunction 8(float) 21(ptr) 22(ptr)
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 9 20 9
+              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 58 54 35 16 16 37 58 17 16
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 64 20 35 16 16 59 19 38
+              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 9 35 16 16 59 19 24
+              68:             TypeVector 8(float) 3
+              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 17
+              70:             TypePointer Function 68(fvec3)
+              71:             TypeFunction 68(fvec3) 70(ptr) 70(ptr)
+              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 69 69 69
+              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 76 72 35 16 16 37 76 17 16
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 69 35 16 16 77 19 38
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 85 69 35 16 16 77 19 24
+              87:             TypeFunction 18(fvec4) 26(ptr)
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 20 25
+              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 91 88 35 16 16 37 91 17 16
+              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 97 25 35 16 16 92 19 38
+             102:     11(int) Constant 62
+             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 76 9 35 102 16 34 19
+             106:    8(float) Constant 1065353216
+             108:     11(int) Constant 63
+             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 111 20 35 108 16 34 19
+             119:     11(int) Constant 64
+             122:    8(float) Constant 1056964608
+             131:     11(int) Constant 66
+             134:    8(float) Constant 3212836864
+             135:             TypeBool
+             137:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             141:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             143:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             149:     11(int) Constant 68
+             151:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 152 9 35 149 16 34 19
+             154:             TypeImage 8(float) 2D array sampled format:Unknown
+             158:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 156 16 35 149 16 37 157 158 17
+             159:             TypePointer UniformConstant 154
+160(textureShadowMap):    159(ptr) Variable UniformConstant
+             163:     11(int) Constant 8
+             161:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 162 155 35 149 16 37 162 160(textureShadowMap) 163
+             165:             TypeSampler
+             166:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 149 16 37 168 158 17
+             169:             TypePointer UniformConstant 165
+170(samplerShadowMap):    169(ptr) Variable UniformConstant
+             171:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 172 166 35 149 16 37 172 170(samplerShadowMap) 163
+             174:             TypeSampledImage 154
+             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 176 16 35 149 16 37 177 158 17
+             190:     11(int) Constant 69
+             193:    8(float) Constant 0
+             194:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             201:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             207:     11(int) Constant 71
+             208:    8(float) Constant 1048576000
+             211:     11(int) Constant 74
+             218:     11(int) Constant 80
+             219:             TypeVector 11(int) 3
+             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 12 17
+             221:             TypePointer Function 219(ivec3)
+             223:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 224 220 35 218 16 59 19
+             228:             TypeInt 32 1
+             230:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 229 14 19 16
+             231:             TypeVector 228(int) 2
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 230 24
+             233:             TypePointer Function 231(ivec2)
+             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 236 232 35 218 16 59 19
+             238:             TypePointer Function 11(int)
+             242:             TypePointer Function 228(int)
+             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 250 230 35 218 16 59 19
+             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 257 230 35 218 16 59 19
+             263:     11(int) Constant 81
+             265:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 266 9 35 263 16 59 19
+             268:    8(float) Constant 1069547520
+             270:     11(int) Constant 82
+             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 273 9 35 270 16 59 19
+             282:     11(int) Constant 83
+             284:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 285 9 35 282 16 59 19
+             294:     11(int) Constant 85
+             296:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 297 9 35 294 16 59 19
+             300:     11(int) Constant 86
+             302:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 303 230 35 300 16 59 19
+             305:    228(int) Constant 0
+             307:     11(int) Constant 87
+             309:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 310 230 35 307 16 59 19
+             312:    228(int) Constant 1
+             314:     11(int) Constant 89
+             316:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 230 35 314 16 59 19
+             332:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             336:     11(int) Constant 91
+             338:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 339 230 35 336 16 59 19
+             354:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             358:     11(int) Constant 93
+             377:     11(int) Constant 94
+             390:     11(int) Constant 98
+             400:     11(int) Constant 102
+             402:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 403 230 35 400 16 77 19
+             415:    228(int) Constant 3
+             416:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             420:     11(int) Constant 104
+             422:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 423 20 35 420 16 77 19
+             430:             TypeMatrix 18(fvec4) 4
+             432:   135(bool) ConstantTrue
+             431:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 432
+      433(Light):             TypeStruct 18(fvec4) 18(fvec4) 18(fvec4) 430
+             436:     11(int) Constant 46
+             437:     11(int) Constant 14
+             434:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
+             438:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
+             439:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
+             442:     11(int) Constant 47
+             443:     11(int) Constant 21
+             440:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 441 431 35 442 443 16 16 17
+             444:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 445 38 35 420 16 37 445 16 17 434 438 439 440
+             446:             TypeArray 433(Light) 17
+             447:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 444 17
+        448(UBO):             TypeStruct 18(fvec4) 446 228(int) 228(int)
+             449:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
+             452:     11(int) Constant 53
+             450:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 451 447 35 452 437 16 16 17
+             455:     11(int) Constant 55
+             456:     11(int) Constant 24
+             453:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 454 230 35 455 456 16 16 17
+             457:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 454 230 35 455 456 16 16 17
+             458:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 459 38 35 420 16 37 459 16 17 449 450 453 457
+        460(ubo):             TypeStruct 448(UBO)
+             463:     11(int) Constant 58
+             464:     11(int) Constant 37
+             461:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 458 35 463 464 16 16 17
+             465:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 462 38 35 420 16 37 462 16 17 461
+             466:             TypePointer Uniform 460(ubo)
+             467:    466(ptr) Variable Uniform
+             468:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 465 35 420 16 37 1 467 163
+             470:             TypePointer Uniform 430
+             475:     11(int) Constant 108
+             477:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 297 9 35 475 16 77 19
+             486:     11(int) Constant 113
+             496:     11(int) Constant 115
+             503:     11(int) Constant 121
+             505:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 85 69 35 503 16 92 19
+             507:             TypeImage 8(float) 2D sampled format:Unknown
+             508:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 156 16 35 503 16 37 157 158 17
+             509:             TypePointer UniformConstant 507
+510(textureposition):    509(ptr) Variable UniformConstant
+             511:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 512 508 35 503 16 37 512 510(textureposition) 163
+             514:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 503 16 37 168 158 17
+515(samplerposition):    169(ptr) Variable UniformConstant
+             516:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 517 514 35 503 16 37 517 515(samplerposition) 163
+             519:             TypeSampledImage 507
+             520:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 176 16 35 503 16 37 177 158 17
+             526:     11(int) Constant 122
+             528:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 529 69 35 526 16 92 19
+531(textureNormal):    509(ptr) Variable UniformConstant
+             532:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 533 508 35 526 16 37 533 531(textureNormal) 163
+             535:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 526 16 37 168 158 17
+536(samplerNormal):    169(ptr) Variable UniformConstant
+             537:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 538 535 35 526 16 37 538 536(samplerNormal) 163
+             545:     11(int) Constant 123
+             547:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 548 20 35 545 16 92 19
+550(textureAlbedo):    509(ptr) Variable UniformConstant
+             551:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 552 508 35 545 16 37 552 550(textureAlbedo) 163
+             554:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 545 16 37 168 158 17
+555(samplerAlbedo):    169(ptr) Variable UniformConstant
+             556:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 557 554 35 545 16 37 557 555(samplerAlbedo) 163
+             563:     11(int) Constant 128
+             564:             TypePointer Uniform 228(int)
+             567:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             573:     11(int) Constant 129
+             584:     11(int) Constant 131
+             586:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 69 35 584 16 92 19
+             588:   68(fvec3) ConstantComposite 106 106 106
+             594:     11(int) Constant 132
+             598:     11(int) Constant 134
+             601:     11(int) Constant 135
+             605:     11(int) Constant 137
+             608:     11(int) Constant 138
+             612:     11(int) Constant 140
+             616:     11(int) Constant 141
+             620:     11(int) Constant 143
+             624:     11(int) Constant 144
+             629:     11(int) Constant 146
+             638:     11(int) Constant 150
+             641:    8(float) Constant 1036831949
+             644:     11(int) Constant 152
+             646:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 647 69 35 644 16 92 19
+             652:     11(int) Constant 154
+             654:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 403 230 35 652 16 92 19
+             666:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             670:     11(int) Constant 157
+             672:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 673 69 35 670 16 92 19
+             676:             TypePointer Uniform 18(fvec4)
+             683:     11(int) Constant 159
+             685:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 152 9 35 683 16 92 19
+             690:     11(int) Constant 160
+             694:     11(int) Constant 163
+             696:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 697 69 35 694 16 92 19
+             705:     11(int) Constant 164
+             709:     11(int) Constant 166
+             711:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 712 9 35 709 16 92 19
+             714:    8(float) Constant 1064781546
+             716:     11(int) Constant 167
+             718:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 719 9 35 716 16 92 19
+             721:    8(float) Constant 1063781322
+             723:     11(int) Constant 168
+             725:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 726 9 35 723 16 92 19
+             728:    8(float) Constant 1120403456
+             730:     11(int) Constant 171
+             732:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 733 69 35 730 16 92 19
+             746:     11(int) Constant 174
+             748:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 749 9 35 746 16 92 19
+             755:     11(int) Constant 175
+             757:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 758 9 35 755 16 92 19
+             765:     11(int) Constant 176
+             767:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 768 9 35 765 16 92 19
+             774:     11(int) Constant 179
+             776:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 777 9 35 774 16 92 19
+             784:     11(int) Constant 180
+             786:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 787 69 35 784 16 92 19
+             792:     11(int) Constant 183
+             794:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 795 69 35 792 16 92 19
+             802:     11(int) Constant 184
+             804:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 805 9 35 802 16 92 19
+             812:     11(int) Constant 185
+             814:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 815 69 35 812 16 92 19
+             818:    8(float) Constant 1098907648
+             823:    8(float) Constant 1075838976
+             827:     11(int) Constant 187
+             836:    228(int) Constant 2
+             852:     11(int) Constant 191
+             855:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
+             861:     11(int) Constant 193
+             869:     11(int) Constant 196
+             878:             TypePointer Input 23(fvec2)
+       879(inUV):    878(ptr) Variable Input
+             881:             TypePointer Output 18(fvec4)
+882(@entryPointOutput):    881(ptr) Variable Output
+                              Line 1 119 1
+         6(main):           4 Function None 5
+               7:             Label
+       877(inUV):     26(ptr) Variable Function
+      883(param):     26(ptr) Variable Function
+                              Line 1 119 0
+             880:   23(fvec2) Load 879(inUV)
+                              Store 877(inUV) 880
+             884:   23(fvec2) Load 877(inUV)
+                              Store 883(param) 884
+             885:   18(fvec4) FunctionCall 90(@main(vf2;) 883(param)
+                              Store 882(@entryPointOutput) 885
                               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
+                              Line 1 61 1
+32(textureProj(vf4;f1;vf2;):    8(float) Function None 27
+           29(P):     21(ptr) FunctionParameter
+       30(layer):     22(ptr) FunctionParameter
+      31(offset):     26(ptr) FunctionParameter
+              40:             Label
+     103(shadow):     22(ptr) Variable Function
+109(shadowCoord):     21(ptr) Variable Function
+       150(dist):     22(ptr) Variable Function
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
+              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 43 29(P) 46
+              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 47 30(layer) 46
+              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 50 31(offset) 46
+              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 34 32(textureProj(vf4;f1;vf2;)
+             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 102 102 16 16
+             105:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 104 103(shadow) 46
+                              Store 103(shadow) 106
+             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 108 108 16 16
+             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 110 109(shadowCoord) 46
+             113:   18(fvec4) Load 29(P)
+             114:     22(ptr) AccessChain 29(P) 17
+             115:    8(float) Load 114
+             116:   18(fvec4) CompositeConstruct 115 115 115 115
+             117:   18(fvec4) FDiv 113 116
+                              Store 109(shadowCoord) 117
+             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 119 119 16 16
+             120:   18(fvec4) Load 109(shadowCoord)
+             121:   23(fvec2) VectorShuffle 120 120 0 1
+             123:   23(fvec2) VectorTimesScalar 121 122
+             124:   23(fvec2) CompositeConstruct 122 122
+             125:   23(fvec2) FAdd 123 124
+             126:     22(ptr) AccessChain 109(shadowCoord) 16
+             127:    8(float) CompositeExtract 125 0
+                              Store 126 127
+             128:     22(ptr) AccessChain 109(shadowCoord) 38
+             129:    8(float) CompositeExtract 125 1
+                              Store 128 129
+             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 131 131 16 16
+             132:     22(ptr) AccessChain 109(shadowCoord) 24
+             133:    8(float) Load 132
+             138:   135(bool) FOrdGreaterThan 133 134
+             139:     22(ptr) AccessChain 109(shadowCoord) 24
+             140:    8(float) Load 139
+             142:   135(bool) FOrdLessThan 140 106
+             144:   135(bool) LogicalAnd 138 142
+                              SelectionMerge 146 None
+                              BranchConditional 144 145 146
+             145:               Label
+             147:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+             148:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 149 149 16 16
+             153:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 151 150(dist) 46
+             164:         154   Load 160(textureShadowMap)
+             173:         165   Load 170(samplerShadowMap)
+             178:         174   SampledImage 164 173
+             179:   18(fvec4)   Load 109(shadowCoord)
+             180:   23(fvec2)   VectorShuffle 179 179 0 1
+             181:   23(fvec2)   Load 31(offset)
+             182:   23(fvec2)   FAdd 180 181
+             183:    8(float)   Load 30(layer)
+             184:    8(float)   CompositeExtract 182 0
+             185:    8(float)   CompositeExtract 182 1
+             186:   68(fvec3)   CompositeConstruct 184 185 183
+             187:   18(fvec4)   ImageSampleImplicitLod 178 186
+             188:    8(float)   CompositeExtract 187 0
+                                Store 150(dist) 188
+             189:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 190 190 16 16
+             191:     22(ptr)   AccessChain 109(shadowCoord) 17
+             192:    8(float)   Load 191
+             195:   135(bool)   FOrdGreaterThan 192 193
+             196:    8(float)   Load 150(dist)
+             197:     22(ptr)   AccessChain 109(shadowCoord) 24
+             198:    8(float)   Load 197
+             200:   135(bool)   FOrdLessThan 196 198
+             202:   135(bool)   LogicalAnd 195 200
+                                SelectionMerge 204 None
+                                BranchConditional 202 203 204
+             203:                 Label
+             205:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+             206:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 207 207 16 16
+                                  Store 103(shadow) 208
+                                  Branch 204
+             204:               Label
+                                Branch 146
+             146:             Label
+             209:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 211 211 16 16
+             212:    8(float) Load 103(shadow)
+                              ReturnValue 212
                               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
+                              Line 1 78 1
+57(filterPCF(vf4;f1;):    8(float) Function None 53
+          55(sc):     21(ptr) FunctionParameter
+       56(layer):     22(ptr) FunctionParameter
+              60:             Label
+222(sizeQueryTemp):    221(ptr) Variable Function
+     234(texDim):    233(ptr) Variable Function
+   248(elements):    242(ptr) Variable Function
+     255(levels):    242(ptr) Variable Function
+      264(scale):     22(ptr) Variable Function
+         271(dx):     22(ptr) Variable Function
+         283(dy):     22(ptr) Variable Function
+295(shadowFactor):     22(ptr) Variable Function
+      301(count):    242(ptr) Variable Function
+      308(range):    242(ptr) Variable Function
+          315(x):    242(ptr) Variable Function
+          337(y):    242(ptr) Variable Function
+      368(param):     21(ptr) Variable Function
+      370(param):     22(ptr) Variable Function
+      372(param):     26(ptr) Variable Function
+              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
+              65:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 63 55(sc) 46
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 66 56(layer) 46
+             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 59 57(filterPCF(vf4;f1;)
+             216:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             217:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 218 218 16 16
+             225:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 223 222(sizeQueryTemp) 46
+             226:         154 Load 160(textureShadowMap)
+             227:  219(ivec3) ImageQuerySizeLod 226 16
+                              Store 222(sizeQueryTemp) 227
+             237:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 235 234(texDim) 46
+             239:    238(ptr) AccessChain 222(sizeQueryTemp) 16
+             240:     11(int) Load 239
+             241:    228(int) Bitcast 240
+             243:    242(ptr) AccessChain 234(texDim) 16
+                              Store 243 241
+             244:    238(ptr) AccessChain 222(sizeQueryTemp) 38
+             245:     11(int) Load 244
+             246:    228(int) Bitcast 245
+             247:    242(ptr) AccessChain 234(texDim) 38
+                              Store 247 246
+             251:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 249 248(elements) 46
+             252:    238(ptr) AccessChain 222(sizeQueryTemp) 24
+             253:     11(int) Load 252
+             254:    228(int) Bitcast 253
+                              Store 248(elements) 254
+             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 256 255(levels) 46
+             259:         154 Load 160(textureShadowMap)
+             260:     11(int) ImageQueryLevels 259
+             261:    228(int) Bitcast 260
+                              Store 255(levels) 261
+             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 263 263 16 16
+             267:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 265 264(scale) 46
+                              Store 264(scale) 268
+             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 270 270 16 16
+             274:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 272 271(dx) 46
+             275:    8(float) Load 264(scale)
+             276:    8(float) FMul 275 106
+             277:    242(ptr) AccessChain 234(texDim) 16
+             278:    228(int) Load 277
+             279:    8(float) ConvertSToF 278
+             280:    8(float) FDiv 276 279
+                              Store 271(dx) 280
+             281:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 282 282 16 16
+             286:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 284 283(dy) 46
+             287:    8(float) Load 264(scale)
+             288:    8(float) FMul 287 106
+             289:    242(ptr) AccessChain 234(texDim) 38
+             290:    228(int) Load 289
+             291:    8(float) ConvertSToF 290
+             292:    8(float) FDiv 288 291
+                              Store 283(dy) 292
+             293:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 294 294 16 16
+             298:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 296 295(shadowFactor) 46
+                              Store 295(shadowFactor) 193
+             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 300 300 16 16
+             304:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 302 301(count) 46
+                              Store 301(count) 305
+             306:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 307 307 16 16
+             311:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 309 308(range) 46
+                              Store 308(range) 312
+             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
+             318:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(x) 46
+             319:    228(int) Load 308(range)
+             320:    228(int) SNegate 319
+                              Store 315(x) 320
+                              Branch 321
+             321:             Label
+             325:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             326:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
+                              LoopMerge 323 324 None
+                              Branch 327
+             327:             Label
+             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
+             330:    228(int) Load 315(x)
+             331:    228(int) Load 308(range)
+             333:   135(bool) SLessThanEqual 330 331
+                              BranchConditional 333 322 323
+             322:               Label
+             334:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             335:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
+             340:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 338 337(y) 46
+             341:    228(int)   Load 308(range)
+             342:    228(int)   SNegate 341
+                                Store 337(y) 342
+                                Branch 343
+             343:               Label
+             347:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             348:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
+                                LoopMerge 345 346 None
+                                Branch 349
+             349:               Label
+             350:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             351:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
+             352:    228(int)   Load 337(y)
+             353:    228(int)   Load 308(range)
+             355:   135(bool)   SLessThanEqual 352 353
+                                BranchConditional 355 344 345
+             344:                 Label
+             356:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             357:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 358 358 16 16
+             359:    8(float)     Load 271(dx)
+             360:    228(int)     Load 315(x)
+             361:    8(float)     ConvertSToF 360
+             362:    8(float)     FMul 359 361
+             363:    8(float)     Load 283(dy)
+             364:    228(int)     Load 337(y)
+             365:    8(float)     ConvertSToF 364
+             366:    8(float)     FMul 363 365
+             367:   23(fvec2)     CompositeConstruct 362 366
+             369:   18(fvec4)     Load 55(sc)
+                                  Store 368(param) 369
+             371:    8(float)     Load 56(layer)
+                                  Store 370(param) 371
+                                  Store 372(param) 367
+             373:    8(float)     FunctionCall 32(textureProj(vf4;f1;vf2;) 368(param) 370(param) 372(param)
+             374:    8(float)     Load 295(shadowFactor)
+             375:    8(float)     FAdd 374 373
+                                  Store 295(shadowFactor) 375
+             376:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 377 377 16 16
+             378:    228(int)     Load 301(count)
+             379:    228(int)     IAdd 378 312
+                                  Store 301(count) 379
+                                  Branch 346
+             346:                 Label
+             380:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             381:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
+             382:    228(int)     Load 337(y)
+             383:    228(int)     IAdd 382 312
+                                  Store 337(y) 383
+                                  Branch 343
+             345:               Label
+                                Branch 324
+             324:               Label
+             384:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             385:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
+             386:    228(int)   Load 315(x)
+             387:    228(int)   IAdd 386 312
+                                Store 315(x) 387
+                                Branch 321
+             323:             Label
+             388:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             389:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 390 390 16 16
+             391:    8(float) Load 295(shadowFactor)
+             392:    228(int) Load 301(count)
+             393:    8(float) ConvertSToF 392
+             394:    8(float) FDiv 391 393
+                              ReturnValue 394
                               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
+                              Line 1 101 49
+75(shadow(vf3;vf3;):   68(fvec3) Function None 71
+   73(fragcolor):     70(ptr) FunctionParameter
+     74(fragPos):     70(ptr) FunctionParameter
+              78:             Label
+          401(i):    242(ptr) Variable Function
+ 421(shadowClip):     21(ptr) Variable Function
+476(shadowFactor):     22(ptr) Variable Function
+      481(param):     21(ptr) Variable Function
+      483(param):     22(ptr) Variable Function
+              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 81 73(fragcolor) 46
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 84 74(fragPos) 46
+             397:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 77 75(shadow(vf3;vf3;)
+             398:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+             399:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
+             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 402 401(i) 46
+                              Store 401(i) 305
+                              Branch 405
+             405:             Label
+             409:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+             410:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
+                              LoopMerge 407 408 None
+                              Branch 411
+             411:             Label
+             412:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+             413:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
+             414:    228(int) Load 401(i)
+             417:   135(bool) SLessThan 414 415
+                              BranchConditional 417 406 407
+             406:               Label
+             418:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+             419:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 420 420 16 16
+             424:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 422 421(shadowClip) 46
+             425:   68(fvec3)   Load 74(fragPos)
+             426:    8(float)   CompositeExtract 425 0
+             427:    8(float)   CompositeExtract 425 1
+             428:    8(float)   CompositeExtract 425 2
+             429:   18(fvec4)   CompositeConstruct 426 427 428 106
+             469:    228(int)   Load 401(i)
+             471:    470(ptr)   AccessChain 467 305 312 469 415
+             472:         430   Load 471
+             473:   18(fvec4)   VectorTimesMatrix 429 472
+                                Store 421(shadowClip) 473
+             474:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 475 475 16 16
+             478:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 477 476(shadowFactor) 46
+             479:    228(int)   Load 401(i)
+             480:    8(float)   ConvertSToF 479
+             482:   18(fvec4)   Load 421(shadowClip)
+                                Store 481(param) 482
+                                Store 483(param) 480
+             484:    8(float)   FunctionCall 57(filterPCF(vf4;f1;) 481(param) 483(param)
+                                Store 476(shadowFactor) 484
+             485:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 486 486 16 16
+             487:    8(float)   Load 476(shadowFactor)
+             488:   68(fvec3)   Load 73(fragcolor)
+             489:   68(fvec3)   VectorTimesScalar 488 487
+                                Store 73(fragcolor) 489
+                                Branch 408
+             408:               Label
+             490:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+             491:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
+             492:    228(int)   Load 401(i)
+             493:    228(int)   IAdd 492 312
+                                Store 401(i) 493
+                                Branch 405
+             407:             Label
+             494:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+             495:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 496 496 16 16
+             497:   68(fvec3) Load 73(fragcolor)
+                              ReturnValue 497
                               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
+                              Line 1 119 1
+  90(@main(vf2;):   18(fvec4) Function None 87
+        89(inUV):     26(ptr) FunctionParameter
+              93:             Label
+    504(fragPos):     70(ptr) Variable Function
+     527(normal):     70(ptr) Variable Function
+     546(albedo):     21(ptr) Variable Function
+  585(fragcolor):     70(ptr) Variable Function
+      589(param):     70(ptr) Variable Function
+      590(param):     70(ptr) Variable Function
+          645(N):     70(ptr) Variable Function
+          653(i):    242(ptr) Variable Function
+          671(L):     70(ptr) Variable Function
+       684(dist):     22(ptr) Variable Function
+          695(V):     70(ptr) Variable Function
+710(lightCosInnerAngle):     22(ptr) Variable Function
+717(lightCosOuterAngle):     22(ptr) Variable Function
+ 724(lightRange):     22(ptr) Variable Function
+        731(dir):     70(ptr) Variable Function
+     747(cosDir):     22(ptr) Variable Function
+ 756(spotEffect):     22(ptr) Variable Function
+766(heightAttenuation):     22(ptr) Variable Function
+      775(NdotL):     22(ptr) Variable Function
+       785(diff):     70(ptr) Variable Function
+          793(R):     70(ptr) Variable Function
+      803(NdotR):     22(ptr) Variable Function
+       813(spec):     70(ptr) Variable Function
+      862(param):     70(ptr) Variable Function
+      864(param):     70(ptr) Variable Function
+              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
+              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 96 89(inUV) 46
+             500:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 92 90(@main(vf2;)
+             501:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             502:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 503 503 16 16
+             506:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 505 504(fragPos) 46
+             513:         507 Load 510(textureposition)
+             518:         165 Load 515(samplerposition)
+             521:         519 SampledImage 513 518
+             522:   23(fvec2) Load 89(inUV)
+             523:   18(fvec4) ImageSampleImplicitLod 521 522
+             524:   68(fvec3) VectorShuffle 523 523 0 1 2
+                              Store 504(fragPos) 524
+             525:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 526 526 16 16
+             530:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 528 527(normal) 46
+             534:         507 Load 531(textureNormal)
+             539:         165 Load 536(samplerNormal)
+             540:         519 SampledImage 534 539
+             541:   23(fvec2) Load 89(inUV)
+             542:   18(fvec4) ImageSampleImplicitLod 540 541
+             543:   68(fvec3) VectorShuffle 542 542 0 1 2
+                              Store 527(normal) 543
+             544:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 545 545 16 16
+             549:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 547 546(albedo) 46
+             553:         507 Load 550(textureAlbedo)
+             558:         165 Load 555(samplerAlbedo)
+             559:         519 SampledImage 553 558
+             560:   23(fvec2) Load 89(inUV)
+             561:   18(fvec4) ImageSampleImplicitLod 559 560
+                              Store 546(albedo) 561
+             562:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 563 563 16 16
+             565:    564(ptr) AccessChain 467 305 415
+             566:    228(int) Load 565
+             568:   135(bool) SGreaterThan 566 305
+                              SelectionMerge 570 None
+                              BranchConditional 568 569 570
+             569:               Label
+             571:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             572:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 573 573 16 16
+             574:    564(ptr)   AccessChain 467 305 415
+             575:    228(int)   Load 574
+                                SelectionMerge 581 None
+                                Switch 575 581 
+                                       case 1: 576
+                                       case 2: 577
+                                       case 3: 578
+                                       case 4: 579
+                                       case 5: 580
+             576:                 Label
+             582:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             583:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 584 584 16 16
+             587:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 586 585(fragcolor) 46
+                                  Store 589(param) 588
+             591:   68(fvec3)     Load 504(fragPos)
+                                  Store 590(param) 591
+             592:   68(fvec3)     FunctionCall 75(shadow(vf3;vf3;) 589(param) 590(param)
+                                  Store 585(fragcolor) 592
+             593:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 594 594 16 16
+                                  Branch 581
+             577:                 Label
+             596:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             597:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 598 598 16 16
+             599:   68(fvec3)     Load 504(fragPos)
+                                  Store 585(fragcolor) 599
+             600:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 601 601 16 16
+                                  Branch 581
+             578:                 Label
+             603:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             604:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 605 605 16 16
+             606:   68(fvec3)     Load 527(normal)
+                                  Store 585(fragcolor) 606
+             607:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 608 608 16 16
+                                  Branch 581
+             579:                 Label
+             610:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             611:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 612 612 16 16
+             613:   18(fvec4)     Load 546(albedo)
+             614:   68(fvec3)     VectorShuffle 613 613 0 1 2
+                                  Store 585(fragcolor) 614
+             615:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 616 616 16 16
+                                  Branch 581
+             580:                 Label
+             618:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             619:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 620 620 16 16
+             621:   18(fvec4)     Load 546(albedo)
+             622:   68(fvec3)     VectorShuffle 621 621 3 3 3
+                                  Store 585(fragcolor) 622
+             623:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 624 624 16 16
+                                  Branch 581
+             581:               Label
+             627:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             628:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 629 629 16 16
+             630:   68(fvec3)   Load 585(fragcolor)
+             631:    8(float)   CompositeExtract 630 0
+             632:    8(float)   CompositeExtract 630 1
+             633:    8(float)   CompositeExtract 630 2
+             634:   18(fvec4)   CompositeConstruct 631 632 633 106
+                                ReturnValue 634
+             570:             Label
+             636:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             637:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 638 638 16 16
+             639:   18(fvec4) Load 546(albedo)
+             640:   68(fvec3) VectorShuffle 639 639 0 1 2
+             642:   68(fvec3) VectorTimesScalar 640 641
+                              Store 585(fragcolor) 642
+             643:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 644 644 16 16
+             648:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 646 645(N) 46
+             649:   68(fvec3) Load 527(normal)
+             650:   68(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 649
+                              Store 645(N) 650
+             651:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
+             655:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 654 653(i) 46
+                              Store 653(i) 305
+                              Branch 656
+             656:             Label
+             660:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             661:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
+                              LoopMerge 658 659 None
+                              Branch 662
+             662:             Label
+             663:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             664:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
+             665:    228(int) Load 653(i)
+             667:   135(bool) SLessThan 665 415
+                              BranchConditional 667 657 658
+             657:               Label
+             668:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             669:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 670 670 16 16
+             674:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 672 671(L) 46
+             675:    228(int)   Load 653(i)
+             677:    676(ptr)   AccessChain 467 305 312 675 305
+             678:   18(fvec4)   Load 677
+             679:   68(fvec3)   VectorShuffle 678 678 0 1 2
+             680:   68(fvec3)   Load 504(fragPos)
+             681:   68(fvec3)   FSub 679 680
+                                Store 671(L) 681
+             682:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 683 683 16 16
+             686:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 685 684(dist) 46
+             687:   68(fvec3)   Load 671(L)
+             688:    8(float)   ExtInst 3(GLSL.std.450) 66(Length) 687
+                                Store 684(dist) 688
+             689:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 690 690 16 16
+             691:   68(fvec3)   Load 671(L)
+             692:   68(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 691
+                                Store 671(L) 692
+             693:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 694 694 16 16
+             698:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 696 695(V) 46
+             699:    676(ptr)   AccessChain 467 305 305
+             700:   18(fvec4)   Load 699
+             701:   68(fvec3)   VectorShuffle 700 700 0 1 2
+             702:   68(fvec3)   Load 504(fragPos)
+             703:   68(fvec3)   FSub 701 702
+                                Store 695(V) 703
+             704:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 705 705 16 16
+             706:   68(fvec3)   Load 695(V)
+             707:   68(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 706
+                                Store 695(V) 707
+             708:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 709 709 16 16
+             713:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 711 710(lightCosInnerAngle) 46
+                                Store 710(lightCosInnerAngle) 714
+             715:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 716 716 16 16
+             720:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 718 717(lightCosOuterAngle) 46
+                                Store 717(lightCosOuterAngle) 721
+             722:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 723 723 16 16
+             727:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 725 724(lightRange) 46
+                                Store 724(lightRange) 728
+             729:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 730 730 16 16
+             734:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 732 731(dir) 46
+             735:    228(int)   Load 653(i)
+             736:    676(ptr)   AccessChain 467 305 312 735 305
+             737:   18(fvec4)   Load 736
+             738:   68(fvec3)   VectorShuffle 737 737 0 1 2
+             739:    228(int)   Load 653(i)
+             740:    676(ptr)   AccessChain 467 305 312 739 312
+             741:   18(fvec4)   Load 740
+             742:   68(fvec3)   VectorShuffle 741 741 0 1 2
+             743:   68(fvec3)   FSub 738 742
+             744:   68(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 743
+                                Store 731(dir) 744
+             745:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 746 746 16 16
+             750:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 748 747(cosDir) 46
+             751:   68(fvec3)   Load 671(L)
+             752:   68(fvec3)   Load 731(dir)
+             753:    8(float)   Dot 751 752
+                                Store 747(cosDir) 753
+             754:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 755 755 16 16
+             759:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 757 756(spotEffect) 46
+             760:    8(float)   Load 717(lightCosOuterAngle)
+             761:    8(float)   Load 710(lightCosInnerAngle)
+             762:    8(float)   Load 747(cosDir)
+             763:    8(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 760 761 762
+                                Store 756(spotEffect) 763
+             764:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 765 765 16 16
+             769:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 767 766(heightAttenuation) 46
+             770:    8(float)   Load 724(lightRange)
+             771:    8(float)   Load 684(dist)
+             772:    8(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 770 193 771
+                                Store 766(heightAttenuation) 772
+             773:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 774 774 16 16
+             778:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 776 775(NdotL) 46
+             779:   68(fvec3)   Load 645(N)
+             780:   68(fvec3)   Load 671(L)
+             781:    8(float)   Dot 779 780
+             782:    8(float)   ExtInst 3(GLSL.std.450) 40(FMax) 193 781
+                                Store 775(NdotL) 782
+             783:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 784 784 16 16
+             788:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 786 785(diff) 46
+             789:    8(float)   Load 775(NdotL)
+             790:   68(fvec3)   CompositeConstruct 789 789 789
+                                Store 785(diff) 790
+             791:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 792 792 16 16
+             796:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 794 793(R) 46
+             797:   68(fvec3)   Load 671(L)
+             798:   68(fvec3)   FNegate 797
+             799:   68(fvec3)   Load 645(N)
+             800:   68(fvec3)   ExtInst 3(GLSL.std.450) 71(Reflect) 798 799
+                                Store 793(R) 800
+             801:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 802 802 16 16
+             806:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 804 803(NdotR) 46
+             807:   68(fvec3)   Load 793(R)
+             808:   68(fvec3)   Load 695(V)
+             809:    8(float)   Dot 807 808
+             810:    8(float)   ExtInst 3(GLSL.std.450) 40(FMax) 193 809
+                                Store 803(NdotR) 810
+             811:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 812 812 16 16
+             816:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 814 813(spec) 46
+             817:    8(float)   Load 803(NdotR)
+             819:    8(float)   ExtInst 3(GLSL.std.450) 26(Pow) 817 818
+             820:     22(ptr)   AccessChain 546(albedo) 17
+             821:    8(float)   Load 820
+             822:    8(float)   FMul 819 821
+             824:    8(float)   FMul 822 823
+             825:   68(fvec3)   CompositeConstruct 824 824 824
+                                Store 813(spec) 825
+             826:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 827 827 16 16
+             828:   68(fvec3)   Load 785(diff)
+             829:   68(fvec3)   Load 813(spec)
+             830:   68(fvec3)   FAdd 828 829
+             831:    8(float)   Load 756(spotEffect)
+             832:   68(fvec3)   VectorTimesScalar 830 831
+             833:    8(float)   Load 766(heightAttenuation)
+             834:   68(fvec3)   VectorTimesScalar 832 833
+             835:    228(int)   Load 653(i)
+             837:    676(ptr)   AccessChain 467 305 312 835 836
+             838:   18(fvec4)   Load 837
+             839:   68(fvec3)   VectorShuffle 838 838 0 1 2
+             840:   68(fvec3)   FMul 834 839
+             841:   18(fvec4)   Load 546(albedo)
+             842:   68(fvec3)   VectorShuffle 841 841 0 1 2
+             843:   68(fvec3)   FMul 840 842
+             844:   68(fvec3)   Load 585(fragcolor)
+             845:   68(fvec3)   FAdd 844 843
+                                Store 585(fragcolor) 845
+                                Branch 659
+             659:               Label
+             846:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             847:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
+             848:    228(int)   Load 653(i)
+             849:    228(int)   IAdd 848 312
+                                Store 653(i) 849
+                                Branch 656
+             658:             Label
+             850:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             851:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 852 852 16 16
+             853:    564(ptr) AccessChain 467 305 836
+             854:    228(int) Load 853
+             856:   135(bool) SGreaterThan 854 305
+                              SelectionMerge 858 None
+                              BranchConditional 856 857 858
+             857:               Label
+             859:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             860:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 861 861 16 16
+             863:   68(fvec3)   Load 585(fragcolor)
+                                Store 862(param) 863
+             865:   68(fvec3)   Load 504(fragPos)
+                                Store 864(param) 865
+             866:   68(fvec3)   FunctionCall 75(shadow(vf3;vf3;) 862(param) 864(param)
+                                Store 585(fragcolor) 866
+                                Branch 858
+             858:             Label
+             867:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             868:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 869 869 16 16
+             870:   68(fvec3) Load 585(fragcolor)
+             871:    8(float) CompositeExtract 870 0
+             872:    8(float) CompositeExtract 870 1
+             873:    8(float) CompositeExtract 870 2
+             874:   18(fvec4) CompositeConstruct 871 872 873 106
+                              ReturnValue 874
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.geom.out b/Test/baseResults/spv.debuginfo.hlsl.geom.out
index c747d3a..3bb8b31 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.geom.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.geom.out
@@ -1,458 +1,499 @@
 spv.debuginfo.hlsl.geom
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 322
+// Id's are bound by 353
 
                               Capability Geometry
                               Capability MultiViewport
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint Geometry 6  "main" 255 261 266 272 277 282 287 302 309 314 338 341
+                              ExecutionMode 6 Triangles
+                              ExecutionMode 6 Invocations 2
+                              ExecutionMode 6 OutputTriangleStrip
+                              ExecutionMode 6 OutputVertices 3
+               1:             String  ""
+              10:             String  "float"
+              13:             String  "uint"
+              25:             String  "Pos"
+              27:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+              31:             String  "Color"
+              36:             String  "VSOutput"
+              47:             String  "PrimitiveID"
+              52:             String  "LightVec"
+              58:             String  "GSOutput"
+              68:             String  "@main"
+              74:             String  "input"
+              78:             String  "outStream"
+              82:             String  "InvocationID"
+              91:             String  "int"
+              96:             String  "i"
+             111:             String  "bool"
+             119:             String  "output"
+             141:             String  "projection"
+             145:             String  "modelview"
+             149:             String  "lightPos"
+             153:             String  "UBO"
+             156:             String  "ubo"
+             191:             String  "pos"
+             200:             String  "worldPos"
+             211:             String  "lPos"
+             257:             String  "outStream.Pos"
+             263:             String  "outStream.ViewportIndex"
+             268:             String  "outStream.PrimitiveID"
+             274:             String  "outStream.Normal"
+             279:             String  "outStream.Color"
+             284:             String  "outStream.ViewVec"
+             289:             String  "outStream.LightVec"
+                              Name 6  "main"
+                              Name 23  "VSOutput"
+                              MemberName 23(VSOutput) 0  "Pos"
+                              MemberName 23(VSOutput) 1  "Normal"
+                              MemberName 23(VSOutput) 2  "Color"
+                              Name 43  "GSOutput"
+                              MemberName 43(GSOutput) 0  "Pos"
+                              MemberName 43(GSOutput) 1  "ViewportIndex"
+                              MemberName 43(GSOutput) 2  "PrimitiveID"
+                              MemberName 43(GSOutput) 3  "Normal"
+                              MemberName 43(GSOutput) 4  "Color"
+                              MemberName 43(GSOutput) 5  "ViewVec"
+                              MemberName 43(GSOutput) 6  "LightVec"
+                              Name 67  "@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;"
+                              Name 63  "input"
+                              Name 64  "outStream"
+                              Name 65  "InvocationID"
+                              Name 66  "PrimitiveID"
+                              Name 94  "i"
+                              Name 117  "output"
+                              Name 139  "UBO"
+                              MemberName 139(UBO) 0  "projection"
+                              MemberName 139(UBO) 1  "modelview"
+                              MemberName 139(UBO) 2  "lightPos"
+                              Name 154  "ubo"
+                              MemberName 154(ubo) 0  "ubo"
+                              Name 160  ""
+                              Name 189  "pos"
+                              Name 198  "worldPos"
+                              Name 209  "lPos"
+                              Name 255  "outStream.Pos"
+                              Name 261  "outStream.ViewportIndex"
+                              Name 266  "outStream.PrimitiveID"
+                              Name 272  "outStream.Normal"
+                              Name 277  "outStream.Color"
+                              Name 282  "outStream.ViewVec"
+                              Name 287  "outStream.LightVec"
+                              Name 299  "input"
+                              Name 302  "input.Pos"
+                              Name 309  "input.Normal"
+                              Name 314  "input.Color"
+                              Name 336  "InvocationID"
+                              Name 338  "InvocationID"
+                              Name 340  "PrimitiveID"
+                              Name 341  "PrimitiveID"
+                              Name 343  "outStream"
+                              Name 344  "param"
+                              Name 346  "param"
+                              Name 347  "param"
+                              Name 349  "param"
+                              Decorate 135 ArrayStride 64
+                              Decorate 137 ArrayStride 64
+                              MemberDecorate 139(UBO) 0 RowMajor
+                              MemberDecorate 139(UBO) 0 Offset 0
+                              MemberDecorate 139(UBO) 0 MatrixStride 16
+                              MemberDecorate 139(UBO) 1 RowMajor
+                              MemberDecorate 139(UBO) 1 Offset 128
+                              MemberDecorate 139(UBO) 1 MatrixStride 16
+                              MemberDecorate 139(UBO) 2 Offset 256
+                              MemberDecorate 154(ubo) 0 Offset 0
+                              Decorate 154(ubo) Block
+                              Decorate 160 DescriptorSet 0
+                              Decorate 160 Binding 0
+                              Decorate 255(outStream.Pos) BuiltIn Position
+                              Decorate 261(outStream.ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 266(outStream.PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 272(outStream.Normal) Location 0
+                              Decorate 277(outStream.Color) Location 1
+                              Decorate 282(outStream.ViewVec) Location 2
+                              Decorate 287(outStream.LightVec) Location 3
+                              Decorate 302(input.Pos) BuiltIn Position
+                              Decorate 309(input.Normal) Location 0
+                              Decorate 314(input.Color) Location 1
+                              Decorate 338(InvocationID) BuiltIn InvocationId
+                              Decorate 341(PrimitiveID) BuiltIn PrimitiveId
+               4:             TypeVoid
+               5:             TypeFunction 4
+               8:             TypeFloat 32
+              11:             TypeInt 32 0
+              14:     11(int) Constant 32
+              15:     11(int) Constant 6
+              16:     11(int) Constant 0
+              12:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 13 14 15 16
+              17:     11(int) Constant 3
+               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 10 14 17 16
+              18:             TypeVector 8(float) 4
+              19:     11(int) Constant 4
+              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 19
+              21:             TypeVector 8(float) 3
+              22:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 17
+    23(VSOutput):             TypeStruct 18(fvec4) 21(fvec3) 21(fvec3)
+              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 27
+              28:     11(int) Constant 37
+              29:     11(int) Constant 13
+              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 28 29 16 16 17
+              32:     11(int) Constant 39
+              33:     11(int) Constant 34
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17
+              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17
+              37:     11(int) Constant 1
+              39:     11(int) Constant 5
+              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 19 26 39
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 36 37 26 16 16 38 36 16 17 24 30 34
+              40:             TypeArray 23(VSOutput) 17
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 35 17
+              42:             TypePointer Function 40
+    43(GSOutput):             TypeStruct 18(fvec4) 11(int) 11(int) 21(fvec3) 21(fvec3) 21(fvec3) 21(fvec3)
+              45:     11(int) Constant 44
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 45 29 16 16 17
+              48:     11(int) Constant 46
+              49:     11(int) Constant 19
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 12 26 48 49 16 16 17
+              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 12 26 48 49 16 16 17
+              53:     11(int) Constant 50
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
+              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
+              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
+              56:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 58 37 26 16 16 38 58 16 17 44 46 50 51 54 55 56
+              59:             TypePointer Function 43(GSOutput)
+              60:             TypePointer Function 11(int)
+              61:             TypeFunction 4 42(ptr) 59(ptr) 60(ptr) 60(ptr)
+              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 41 57 12 12
+              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 68 62 26 16 16 38 68 17 16
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 74 41 26 16 16 69 19 37
+              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              79:     11(int) Constant 2
+              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 78 57 26 16 16 69 19 79
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 12 26 16 16 69 19 17
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 12 26 16 16 69 19 19
+              89:     11(int) Constant 57
+              90:             TypeInt 32 1
+              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 91 14 19 16
+              93:             TypePointer Function 90(int)
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 96 92 26 89 16 69 19
+              98:     90(int) Constant 0
+             109:     90(int) Constant 3
+             110:             TypeBool
+             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 111 14 79 16
+             116:     11(int) Constant 59
+             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 119 57 26 116 16 69 19
+             121:    8(float) Constant 0
+             122:   18(fvec4) ConstantComposite 121 121 121 121
+             123:   21(fvec3) ConstantComposite 121 121 121
+             124:43(GSOutput) ConstantComposite 122 16 16 123 123 123 123
+             126:     11(int) Constant 60
+             128:     90(int) Constant 1
+             129:             TypePointer Function 21(fvec3)
+             132:             TypeMatrix 18(fvec4) 4
+             134:   110(bool) ConstantTrue
+             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 134
+             135:             TypeArray 132 79
+             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 133 79
+             137:             TypeArray 132 79
+             138:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 133 79
+        139(UBO):             TypeStruct 135 137 18(fvec4)
+             142:     11(int) Constant 28
+             143:     11(int) Constant 21
+             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 141 136 26 142 143 16 16 17
+             146:     11(int) Constant 29
+             147:     11(int) Constant 20
+             144:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 138 26 146 147 16 16 17
+             150:     11(int) Constant 30
+             151:     11(int) Constant 17
+             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 20 26 150 151 16 16 17
+             152:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 153 37 26 126 16 38 153 16 17 140 144 148
+        154(ubo):             TypeStruct 139(UBO)
+             157:     11(int) Constant 33
+             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 152 26 157 28 16 16 17
+             158:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 156 37 26 126 16 38 156 16 17 155
+             159:             TypePointer Uniform 154(ubo)
+             160:    159(ptr) Variable Uniform
+             162:     11(int) Constant 8
+             161:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 158 26 126 16 38 1 160 162
+             164:             TypePointer Uniform 132
+             167:             TypeMatrix 21(fvec3) 3
+             168:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 22 17 134
+             179:     11(int) Constant 61
+             180:     90(int) Constant 4
+             182:     90(int) Constant 2
+             187:     11(int) Constant 63
+             188:             TypePointer Function 18(fvec4)
+             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 191 20 26 187 16 69 19
+             197:     11(int) Constant 64
+             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 200 20 26 197 16 69 19
+             208:     11(int) Constant 66
+             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 211 22 26 208 16 69 19
+             213:             TypePointer Uniform 18(fvec4)
+             222:     11(int) Constant 67
+             223:     90(int) Constant 6
+             230:     11(int) Constant 68
+             231:     90(int) Constant 5
+             237:     11(int) Constant 70
+             245:     11(int) Constant 73
+             249:     11(int) Constant 74
+             253:     11(int) Constant 75
+             254:             TypePointer Output 18(fvec4)
+255(outStream.Pos):    254(ptr) Variable Output
+             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 257 20 26 253 16 38 257 255(outStream.Pos) 162
+             260:             TypePointer Output 11(int)
+261(outStream.ViewportIndex):    260(ptr) Variable Output
+             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 263 12 26 253 16 38 263 261(outStream.ViewportIndex) 162
+266(outStream.PrimitiveID):    260(ptr) Variable Output
+             267:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 268 12 26 253 16 38 268 266(outStream.PrimitiveID) 162
+             271:             TypePointer Output 21(fvec3)
+272(outStream.Normal):    271(ptr) Variable Output
+             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 274 22 26 253 16 38 274 272(outStream.Normal) 162
+277(outStream.Color):    271(ptr) Variable Output
+             278:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 279 22 26 253 16 38 279 277(outStream.Color) 162
+282(outStream.ViewVec):    271(ptr) Variable Output
+             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 284 22 26 253 16 38 284 282(outStream.ViewVec) 162
+287(outStream.LightVec):    271(ptr) Variable Output
+             288:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 289 22 26 253 16 38 289 287(outStream.LightVec) 162
+             298:     11(int) Constant 78
+             300:             TypeArray 18(fvec4) 17
+             301:             TypePointer Input 300
+  302(input.Pos):    301(ptr) Variable Input
+             303:             TypePointer Input 18(fvec4)
+             307:             TypeArray 21(fvec3) 17
+             308:             TypePointer Input 307
+309(input.Normal):    308(ptr) Variable Input
+             310:             TypePointer Input 21(fvec3)
+314(input.Color):    308(ptr) Variable Input
+             337:             TypePointer Input 11(int)
+338(InvocationID):    337(ptr) Variable Input
+341(PrimitiveID):    337(ptr) Variable Input
+                              Line 1 56 1
+         6(main):           4 Function None 5
+               7:             Label
+      299(input):     42(ptr) Variable Function
+336(InvocationID):     60(ptr) Variable Function
+340(PrimitiveID):     60(ptr) Variable Function
+  343(outStream):     59(ptr) Variable Function
+      344(param):     42(ptr) Variable Function
+      346(param):     59(ptr) Variable Function
+      347(param):     60(ptr) Variable Function
+      349(param):     60(ptr) Variable Function
+                              Line 1 56 0
+             304:    303(ptr) AccessChain 302(input.Pos) 98
+             305:   18(fvec4) Load 304
+             306:    188(ptr) AccessChain 299(input) 98 98
+                              Store 306 305
+             311:    310(ptr) AccessChain 309(input.Normal) 98
+             312:   21(fvec3) Load 311
+             313:    129(ptr) AccessChain 299(input) 98 128
+                              Store 313 312
+             315:    310(ptr) AccessChain 314(input.Color) 98
+             316:   21(fvec3) Load 315
+             317:    129(ptr) AccessChain 299(input) 98 182
+                              Store 317 316
+             318:    303(ptr) AccessChain 302(input.Pos) 128
+             319:   18(fvec4) Load 318
+             320:    188(ptr) AccessChain 299(input) 128 98
+                              Store 320 319
+             321:    310(ptr) AccessChain 309(input.Normal) 128
+             322:   21(fvec3) Load 321
+             323:    129(ptr) AccessChain 299(input) 128 128
+                              Store 323 322
+             324:    310(ptr) AccessChain 314(input.Color) 128
+             325:   21(fvec3) Load 324
+             326:    129(ptr) AccessChain 299(input) 128 182
+                              Store 326 325
+             327:    303(ptr) AccessChain 302(input.Pos) 182
+             328:   18(fvec4) Load 327
+             329:    188(ptr) AccessChain 299(input) 182 98
+                              Store 329 328
+             330:    310(ptr) AccessChain 309(input.Normal) 182
+             331:   21(fvec3) Load 330
+             332:    129(ptr) AccessChain 299(input) 182 128
+                              Store 332 331
+             333:    310(ptr) AccessChain 314(input.Color) 182
+             334:   21(fvec3) Load 333
+             335:    129(ptr) AccessChain 299(input) 182 182
+                              Store 335 334
+             339:     11(int) Load 338(InvocationID)
+                              Store 336(InvocationID) 339
+             342:     11(int) Load 341(PrimitiveID)
+                              Store 340(PrimitiveID) 342
+             345:          40 Load 299(input)
+                              Store 344(param) 345
+             348:     11(int) Load 336(InvocationID)
+                              Store 347(param) 348
+             350:     11(int) Load 340(PrimitiveID)
+                              Store 349(param) 350
+             351:           4 FunctionCall 67(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;) 344(param) 346(param) 347(param) 349(param)
+             352:43(GSOutput) Load 346(param)
+                              Store 343(outStream) 352
                               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
+                              Line 1 56 1
+67(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;):           4 Function None 61
+       63(input):     42(ptr) FunctionParameter
+   64(outStream):     59(ptr) FunctionParameter
+65(InvocationID):     60(ptr) FunctionParameter
+ 66(PrimitiveID):     60(ptr) FunctionParameter
+              70:             Label
+           94(i):     93(ptr) Variable Function
+     117(output):     59(ptr) Variable Function
+        189(pos):    188(ptr) Variable Function
+   198(worldPos):    188(ptr) Variable Function
+       209(lPos):    129(ptr) Variable Function
+              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 16 16 16 16
+              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 73 63(input) 76
+              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 77 64(outStream) 76
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 81 65(InvocationID) 76
+              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 84 66(PrimitiveID) 76
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 69 67(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;)
+              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
+              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 95 94(i) 76
+                              Store 94(i) 98
+                              Branch 99
+              99:             Label
+             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
+                              LoopMerge 101 102 None
+                              Branch 105
+             105:             Label
+             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
+             108:     90(int) Load 94(i)
+             113:   110(bool) SLessThan 108 109
+                              BranchConditional 113 100 101
+             100:               Label
+             114:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+             115:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 116 116 16 16
+             120:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 118 117(output) 76
+                                Store 117(output) 124
+             125:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 126 126 16 16
+             127:     90(int)   Load 94(i)
+             130:    129(ptr)   AccessChain 63(input) 127 128
+             131:   21(fvec3)   Load 130
+             163:     11(int)   Load 65(InvocationID)
+             165:    164(ptr)   AccessChain 160 98 128 163
+             166:         132   Load 165
+             169:   18(fvec4)   CompositeExtract 166 0
+             170:   21(fvec3)   VectorShuffle 169 169 0 1 2
+             171:   18(fvec4)   CompositeExtract 166 1
+             172:   21(fvec3)   VectorShuffle 171 171 0 1 2
+             173:   18(fvec4)   CompositeExtract 166 2
+             174:   21(fvec3)   VectorShuffle 173 173 0 1 2
+             175:         167   CompositeConstruct 170 172 174
+             176:   21(fvec3)   VectorTimesMatrix 131 175
+             177:    129(ptr)   AccessChain 117(output) 109
+                                Store 177 176
+             178:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 179 179 16 16
+             181:     90(int)   Load 94(i)
+             183:    129(ptr)   AccessChain 63(input) 181 182
+             184:   21(fvec3)   Load 183
+             185:    129(ptr)   AccessChain 117(output) 180
+                                Store 185 184
+             186:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 187 187 16 16
+             192:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 190 189(pos) 76
+             193:     90(int)   Load 94(i)
+             194:    188(ptr)   AccessChain 63(input) 193 98
+             195:   18(fvec4)   Load 194
+                                Store 189(pos) 195
+             196:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 197 197 16 16
+             201:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 199 198(worldPos) 76
+             202:   18(fvec4)   Load 189(pos)
+             203:     11(int)   Load 65(InvocationID)
+             204:    164(ptr)   AccessChain 160 98 128 203
+             205:         132   Load 204
+             206:   18(fvec4)   VectorTimesMatrix 202 205
+                                Store 198(worldPos) 206
+             207:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 208 208 16 16
+             212:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 210 209(lPos) 76
+             214:    213(ptr)   AccessChain 160 98 182
+             215:   18(fvec4)   Load 214
+             216:     11(int)   Load 65(InvocationID)
+             217:    164(ptr)   AccessChain 160 98 128 216
+             218:         132   Load 217
+             219:   18(fvec4)   VectorTimesMatrix 215 218
+             220:   21(fvec3)   VectorShuffle 219 219 0 1 2
+                                Store 209(lPos) 220
+             221:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 222 222 16 16
+             224:   21(fvec3)   Load 209(lPos)
+             225:   18(fvec4)   Load 198(worldPos)
+             226:   21(fvec3)   VectorShuffle 225 225 0 1 2
+             227:   21(fvec3)   FSub 224 226
+             228:    129(ptr)   AccessChain 117(output) 223
+                                Store 228 227
+             229:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 230 230 16 16
+             232:   18(fvec4)   Load 198(worldPos)
+             233:   21(fvec3)   VectorShuffle 232 232 0 1 2
+             234:   21(fvec3)   FNegate 233
+             235:    129(ptr)   AccessChain 117(output) 231
+                                Store 235 234
+             236:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 237 237 16 16
+             238:   18(fvec4)   Load 198(worldPos)
+             239:     11(int)   Load 65(InvocationID)
+             240:    164(ptr)   AccessChain 160 98 98 239
+             241:         132   Load 240
+             242:   18(fvec4)   VectorTimesMatrix 238 241
+             243:    188(ptr)   AccessChain 117(output) 98
+                                Store 243 242
+             244:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 245 245 16 16
+             246:     11(int)   Load 65(InvocationID)
+             247:     60(ptr)   AccessChain 117(output) 128
+                                Store 247 246
+             248:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 249 249 16 16
+             250:     11(int)   Load 66(PrimitiveID)
+             251:     60(ptr)   AccessChain 117(output) 182
+                                Store 251 250
+             252:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 253 253 16 16
+             258:    188(ptr)   AccessChain 117(output) 98
+             259:   18(fvec4)   Load 258
+                                Store 255(outStream.Pos) 259
+             264:     60(ptr)   AccessChain 117(output) 128
+             265:     11(int)   Load 264
+                                Store 261(outStream.ViewportIndex) 265
+             269:     60(ptr)   AccessChain 117(output) 182
+             270:     11(int)   Load 269
+                                Store 266(outStream.PrimitiveID) 270
+             275:    129(ptr)   AccessChain 117(output) 109
+             276:   21(fvec3)   Load 275
+                                Store 272(outStream.Normal) 276
+             280:    129(ptr)   AccessChain 117(output) 180
+             281:   21(fvec3)   Load 280
+                                Store 277(outStream.Color) 281
+             285:    129(ptr)   AccessChain 117(output) 231
+             286:   21(fvec3)   Load 285
+                                Store 282(outStream.ViewVec) 286
+             290:    129(ptr)   AccessChain 117(output) 223
+             291:   21(fvec3)   Load 290
+                                Store 287(outStream.LightVec) 291
                                 EmitVertex
+                                Branch 102
+             102:               Label
+             292:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+             293:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
+             294:     90(int)   Load 94(i)
+             295:     90(int)   IAdd 294 128
+                                Store 94(i) 295
                                 Branch 99
-              99:               Label
-             266:     86(int)   Load 90(i)
-             267:     86(int)   IAdd 266 117
-                                Store 90(i) 267
-                                Branch 96
-              98:             Label
+             101:             Label
+             296:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
+             297:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 298 298 16 16
                               EndPrimitive
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.tesc.out b/Test/baseResults/spv.debuginfo.hlsl.tesc.out
index a389bba..aa419a4 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.tesc.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.tesc.out
@@ -1,809 +1,917 @@
 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
+// Id's are bound by 688
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint TessellationControl 6  "main" 580 587 594 628 637 644 651 666 681
+                              ExecutionMode 6 OutputVertices 4
+                              ExecutionMode 6 Quads
+                              ExecutionMode 6 SpacingEqual
+                              ExecutionMode 6 VertexOrderCw
+               1:             String  ""
+              10:             String  "float"
+              13:             String  "uint"
+              27:             String  "screenSpaceTessFactor"
+              30:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+              38:             String  "p0"
+              42:             String  "p1"
+              49:             String  "bool"
+              56:             String  "frustumCheck"
+              62:             String  "Pos"
+              65:             String  "inUV"
+              74:             String  "Normal"
+              78:             String  "UV"
+              82:             String  "VSOutput"
+              92:             String  "TessLevelOuter"
+              96:             String  "TessLevelInner"
+              99:             String  "ConstantsHSOutput"
+             104:             String  "ConstantsHS"
+             110:             String  "patch"
+             121:             String  "HSOutput"
+             127:             String  "@main"
+             135:             String  "InvocationID"
+             143:             String  "midPoint"
+             155:             String  "radius"
+             166:             String  "v0"
+             176:             String  "modelview"
+             181:             String  "lightPos"
+             185:             String  "frustumPlanes"
+             188:             String  "tessellatedEdgeSize"
+             192:             String  "viewportDim"
+             196:             String  "UBO"
+             199:             String  "ubo"
+             207:             String  "int"
+             219:             String  "clip0"
+             237:             String  "clip1"
+             312:             String  "pos"
+             319:             String  "type.2d.image"
+             320:             String  "@type.2d.image"
+             325:             String  "textureHeight"
+             329:             String  "type.sampler"
+             330:             String  "@type.sampler"
+             334:             String  "samplerHeight"
+             338:             String  "type.sampled.image"
+             339:             String  "@type.sampled.image"
+             357:             String  "i"
+             410:             String  "output"
+                              Name 6  "main"
+                              Name 26  "screenSpaceTessFactor(vf4;vf4;"
+                              Name 24  "p0"
+                              Name 25  "p1"
+                              Name 55  "frustumCheck(vf4;vf2;"
+                              Name 53  "Pos"
+                              Name 54  "inUV"
+                              Name 69  "VSOutput"
+                              MemberName 69(VSOutput) 0  "Pos"
+                              MemberName 69(VSOutput) 1  "Normal"
+                              MemberName 69(VSOutput) 2  "UV"
+                              Name 90  "ConstantsHSOutput"
+                              MemberName 90(ConstantsHSOutput) 0  "TessLevelOuter"
+                              MemberName 90(ConstantsHSOutput) 1  "TessLevelInner"
+                              Name 103  "ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];"
+                              Name 102  "patch"
+                              Name 113  "HSOutput"
+                              MemberName 113(HSOutput) 0  "Pos"
+                              MemberName 113(HSOutput) 1  "Normal"
+                              MemberName 113(HSOutput) 2  "UV"
+                              Name 126  "@main(struct-VSOutput-vf4-vf3-vf21[4];u1;"
+                              Name 124  "patch"
+                              Name 125  "InvocationID"
+                              Name 141  "midPoint"
+                              Name 153  "radius"
+                              Name 164  "v0"
+                              Name 174  "UBO"
+                              MemberName 174(UBO) 0  "projection"
+                              MemberName 174(UBO) 1  "modelview"
+                              MemberName 174(UBO) 2  "lightPos"
+                              MemberName 174(UBO) 3  "frustumPlanes"
+                              MemberName 174(UBO) 4  "displacementFactor"
+                              MemberName 174(UBO) 5  "tessellationFactor"
+                              MemberName 174(UBO) 6  "viewportDim"
+                              MemberName 174(UBO) 7  "tessellatedEdgeSize"
+                              Name 197  "ubo"
+                              MemberName 197(ubo) 0  "ubo"
+                              Name 203  ""
+                              Name 217  "clip0"
+                              Name 235  "clip1"
+                              Name 310  "pos"
+                              Name 323  "textureHeight"
+                              Name 332  "samplerHeight"
+                              Name 355  "i"
+                              Name 408  "output"
+                              Name 418  "param"
+                              Name 421  "param"
+                              Name 462  "param"
+                              Name 465  "param"
+                              Name 472  "param"
+                              Name 475  "param"
+                              Name 482  "param"
+                              Name 485  "param"
+                              Name 492  "param"
+                              Name 495  "param"
+                              Name 547  "output"
+                              Name 577  "patch"
+                              Name 580  "patch.Pos"
+                              Name 587  "patch.Normal"
+                              Name 594  "patch.UV"
+                              Name 626  "InvocationID"
+                              Name 628  "InvocationID"
+                              Name 630  "flattenTemp"
+                              Name 631  "param"
+                              Name 633  "param"
+                              Name 637  "@entryPointOutput.Pos"
+                              Name 644  "@entryPointOutput.Normal"
+                              Name 651  "@entryPointOutput.UV"
+                              Name 661  "@patchConstantResult"
+                              Name 662  "param"
+                              Name 666  "@patchConstantOutput.TessLevelOuter"
+                              Name 681  "@patchConstantOutput.TessLevelInner"
+                              Decorate 172 ArrayStride 16
+                              MemberDecorate 174(UBO) 0 RowMajor
+                              MemberDecorate 174(UBO) 0 Offset 0
+                              MemberDecorate 174(UBO) 0 MatrixStride 16
+                              MemberDecorate 174(UBO) 1 RowMajor
+                              MemberDecorate 174(UBO) 1 Offset 64
+                              MemberDecorate 174(UBO) 1 MatrixStride 16
+                              MemberDecorate 174(UBO) 2 Offset 128
+                              MemberDecorate 174(UBO) 3 Offset 144
+                              MemberDecorate 174(UBO) 4 Offset 240
+                              MemberDecorate 174(UBO) 5 Offset 244
+                              MemberDecorate 174(UBO) 6 Offset 248
+                              MemberDecorate 174(UBO) 7 Offset 256
+                              MemberDecorate 197(ubo) 0 Offset 0
+                              Decorate 197(ubo) Block
+                              Decorate 203 DescriptorSet 0
+                              Decorate 203 Binding 0
+                              Decorate 323(textureHeight) DescriptorSet 0
+                              Decorate 323(textureHeight) Binding 1
+                              Decorate 332(samplerHeight) DescriptorSet 0
+                              Decorate 332(samplerHeight) Binding 1
+                              Decorate 580(patch.Pos) BuiltIn Position
+                              Decorate 587(patch.Normal) Location 0
+                              Decorate 594(patch.UV) Location 1
+                              Decorate 628(InvocationID) BuiltIn InvocationId
+                              Decorate 637(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 644(@entryPointOutput.Normal) Location 0
+                              Decorate 651(@entryPointOutput.UV) Location 1
+                              Decorate 666(@patchConstantOutput.TessLevelOuter) Patch
+                              Decorate 666(@patchConstantOutput.TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 681(@patchConstantOutput.TessLevelInner) Patch
+                              Decorate 681(@patchConstantOutput.TessLevelInner) BuiltIn TessLevelInner
+               4:             TypeVoid
+               5:             TypeFunction 4
+               8:             TypeFloat 32
+              11:             TypeInt 32 0
+              14:     11(int) Constant 32
+              15:     11(int) Constant 6
+              16:     11(int) Constant 0
+              12:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 13 14 15 16
+              17:     11(int) Constant 3
+               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 10 14 17 16
+              18:             TypeVector 8(float) 4
+              19:     11(int) Constant 4
+              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 19
+              21:             TypePointer Function 18(fvec4)
+              22:             TypeFunction 8(float) 21(ptr) 21(ptr)
+              23:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 9 20 20
+              29:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 30
+              32:     11(int) Constant 1
+              33:     11(int) Constant 5
+              31:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 32 19 29 33
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 27 23 29 16 16 31 27 17 16
+              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 38 20 29 16 16 28 19 32
+              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              43:     11(int) Constant 2
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 42 20 29 16 16 28 19 43
+              45:             TypeVector 8(float) 2
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 43
+              47:             TypePointer Function 45(fvec2)
+              48:             TypeBool
+              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+              51:             TypeFunction 48(bool) 21(ptr) 47(ptr)
+              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 50 20 46
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 56 52 29 16 16 31 56 17 16
+              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 62 20 29 16 16 57 19 32
+              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 65 46 29 16 16 57 19 43
+              67:             TypeVector 8(float) 3
+              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 17
+    69(VSOutput):             TypeStruct 18(fvec4) 67(fvec3) 45(fvec2)
+              71:     11(int) Constant 44
+              72:     11(int) Constant 13
+              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 62 20 29 71 72 16 16 17
+              75:     11(int) Constant 45
+              76:     11(int) Constant 35
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 74 68 29 75 76 16 16 17
+              79:     11(int) Constant 46
+              80:     11(int) Constant 31
+              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 78 46 29 79 80 16 16 17
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 82 32 29 16 16 31 82 16 17 70 73 77
+              83:             TypeArray 69(VSOutput) 19
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 81 19
+              85:             TypePointer Function 83
+              86:             TypeArray 8(float) 19
+              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 9 19
+              88:             TypeArray 8(float) 43
+              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 9 43
+90(ConstantsHSOutput):             TypeStruct 86 88
+              93:     11(int) Constant 58
+              94:     11(int) Constant 25
+              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 92 87 29 93 94 16 16 17
+              97:     11(int) Constant 59
+              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 89 29 97 94 16 16 17
+              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 99 32 29 16 16 31 99 16 17 91 95
+             100:             TypeFunction 90(ConstantsHSOutput) 85(ptr)
+             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 98 84
+             105:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 104 101 29 16 16 31 104 17 16
+             109:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 110 84 29 16 16 105 19 32
+             112:             TypePointer Function 11(int)
+   113(HSOutput):             TypeStruct 18(fvec4) 67(fvec3) 45(fvec2)
+             115:     11(int) Constant 51
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 62 20 29 115 14 16 16 17
+             117:     11(int) Constant 52
+             116:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 74 68 29 117 76 16 16 17
+             119:     11(int) Constant 53
+             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 78 46 29 119 80 16 16 17
+             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 121 32 29 16 16 31 121 16 17 114 116 118
+             122:             TypeFunction 113(HSOutput) 85(ptr) 112(ptr)
+             123:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 120 84 12
+             128:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 127 123 29 16 16 31 127 17 16
+             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 110 84 29 16 16 128 19 32
+             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 135 12 29 16 16 128 19 43
+             140:     11(int) Constant 67
+             142:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 143 20 29 140 16 28 19
+             145:    8(float) Constant 1056964608
+             151:     11(int) Constant 69
+             152:             TypePointer Function 8(float)
+             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 155 9 29 151 16 28 19
+             160:    8(float) Constant 1073741824
+             163:     11(int) Constant 72
+             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 166 20 29 163 16 28 19
+             169:             TypeMatrix 18(fvec4) 4
+             171:    48(bool) ConstantTrue
+             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 171
+             172:             TypeArray 18(fvec4) 15
+             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 20 15
+        174(UBO):             TypeStruct 169 169 18(fvec4) 172 8(float) 8(float) 45(fvec2) 8(float)
+             177:     11(int) Constant 29
+             178:     11(int) Constant 20
+             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 176 170 29 177 178 16 16 17
+             179:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 176 170 29 177 178 16 16 17
+             182:     11(int) Constant 30
+             183:     11(int) Constant 17
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 181 20 29 182 183 16 16 17
+             186:     11(int) Constant 22
+             184:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 185 173 29 80 186 16 16 17
+             189:     11(int) Constant 27
+             187:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 188 9 29 76 189 16 16 17
+             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 188 9 29 76 189 16 16 17
+             193:     11(int) Constant 34
+             191:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 192 46 29 193 178 16 16 17
+             194:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 188 9 29 76 189 16 16 17
+             195:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 196 32 29 163 16 31 196 16 17 175 179 180 184 187 190 191 194
+        197(ubo):             TypeStruct 174(UBO)
+             200:     11(int) Constant 37
+             198:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 199 195 29 200 200 16 16 17
+             201:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 199 32 29 163 16 31 199 16 17 198
+             202:             TypePointer Uniform 197(ubo)
+             203:    202(ptr) Variable Uniform
+             205:     11(int) Constant 8
+             204:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 201 29 163 16 31 1 203 205
+             206:             TypeInt 32 1
+             208:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 207 14 19 16
+             209:    206(int) Constant 0
+             210:    206(int) Constant 1
+             211:             TypePointer Uniform 169
+             216:     11(int) Constant 75
+             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 219 20 29 216 16 28 19
+             223:    8(float) Constant 0
+             224:   67(fvec3) ConstantComposite 223 223 223
+             234:     11(int) Constant 76
+             236:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 237 20 29 234 16 28 19
+             250:     11(int) Constant 79
+             257:     11(int) Constant 80
+             264:     11(int) Constant 83
+             265:    206(int) Constant 6
+             266:             TypePointer Uniform 45(fvec2)
+             277:     11(int) Constant 84
+             288:     11(int) Constant 89
+             292:    206(int) Constant 7
+             293:             TypePointer Uniform 8(float)
+             297:    206(int) Constant 5
+             301:    8(float) Constant 1065353216
+             302:    8(float) Constant 1115684864
+             309:     11(int) Constant 98
+             311:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 312 20 29 309 16 57 19
+             316:     11(int) Constant 99
+             317:             TypeImage 8(float) 2D sampled format:Unknown
+             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             318:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 319 16 29 316 16 31 320 321 17
+             322:             TypePointer UniformConstant 317
+323(textureHeight):    322(ptr) Variable UniformConstant
+             324:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 325 318 29 316 16 31 325 323(textureHeight) 205
+             327:             TypeSampler
+             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 329 32 29 316 16 31 330 321 17
+             331:             TypePointer UniformConstant 327
+332(samplerHeight):    331(ptr) Variable UniformConstant
+             333:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 334 328 29 316 16 31 334 332(samplerHeight) 205
+             336:             TypeSampledImage 317
+             337:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 338 16 29 316 16 31 339 321 17
+             344:    206(int) Constant 4
+             353:     11(int) Constant 102
+             354:             TypePointer Function 206(int)
+             356:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 357 208 29 353 16 57 19
+             369:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             373:     11(int) Constant 103
+             375:    206(int) Constant 3
+             377:             TypePointer Uniform 18(fvec4)
+             381:    8(float) Constant 1090519040
+             383:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             387:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             388:    48(bool) ConstantFalse
+             391:     11(int) Constant 105
+             397:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             400:     11(int) Constant 108
+             406:     11(int) Constant 113
+             407:             TypePointer Function 90(ConstantsHSOutput)
+             409:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 410 98 29 406 16 105 19
+             412:          86 ConstantComposite 223 223 223 223
+             413:          88 ConstantComposite 223 223
+             414:90(ConstantsHSOutput) ConstantComposite 412 413
+             416:     11(int) Constant 115
+             417:    206(int) Constant 2
+             425:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             426:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             432:     11(int) Constant 117
+             435:     11(int) Constant 118
+             438:     11(int) Constant 119
+             441:     11(int) Constant 120
+             444:     11(int) Constant 121
+             447:     11(int) Constant 122
+             452:     11(int) Constant 126
+             455:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
+             461:     11(int) Constant 128
+             471:     11(int) Constant 129
+             481:     11(int) Constant 130
+             491:     11(int) Constant 131
+             501:     11(int) Constant 132
+             509:     11(int) Constant 133
+             519:     11(int) Constant 139
+             522:     11(int) Constant 140
+             525:     11(int) Constant 141
+             528:     11(int) Constant 142
+             531:     11(int) Constant 143
+             534:     11(int) Constant 144
+             538:     11(int) Constant 148
+             545:     11(int) Constant 159
+             546:             TypePointer Function 113(HSOutput)
+             548:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 410 120 29 545 16 128 19
+             550:   18(fvec4) ConstantComposite 223 223 223 223
+             551:   45(fvec2) ConstantComposite 223 223
+             552:113(HSOutput) ConstantComposite 550 224 551
+             554:     11(int) Constant 160
+             560:     11(int) Constant 161
+             562:             TypePointer Function 67(fvec3)
+             567:     11(int) Constant 162
+             573:     11(int) Constant 163
+             578:             TypeArray 18(fvec4) 19
+             579:             TypePointer Input 578
+  580(patch.Pos):    579(ptr) Variable Input
+             581:             TypePointer Input 18(fvec4)
+             585:             TypeArray 67(fvec3) 19
+             586:             TypePointer Input 585
+587(patch.Normal):    586(ptr) Variable Input
+             588:             TypePointer Input 67(fvec3)
+             592:             TypeArray 45(fvec2) 19
+             593:             TypePointer Input 592
+   594(patch.UV):    593(ptr) Variable Input
+             595:             TypePointer Input 45(fvec2)
+             627:             TypePointer Input 11(int)
+628(InvocationID):    627(ptr) Variable Input
+             636:             TypePointer Output 578
+637(@entryPointOutput.Pos):    636(ptr) Variable Output
+             641:             TypePointer Output 18(fvec4)
+             643:             TypePointer Output 585
+644(@entryPointOutput.Normal):    643(ptr) Variable Output
+             648:             TypePointer Output 67(fvec3)
+             650:             TypePointer Output 592
+651(@entryPointOutput.UV):    650(ptr) Variable Output
+             655:             TypePointer Output 45(fvec2)
+             665:             TypePointer Output 86
+666(@patchConstantOutput.TessLevelOuter):    665(ptr) Variable Output
+             669:             TypePointer Output 8(float)
+             680:             TypePointer Output 88
+681(@patchConstantOutput.TessLevelInner):    680(ptr) Variable Output
+                              Line 1 158 1
+         6(main):           4 Function None 5
+               7:             Label
+      577(patch):     85(ptr) Variable Function
+626(InvocationID):    112(ptr) Variable Function
+630(flattenTemp):    546(ptr) Variable Function
+      631(param):     85(ptr) Variable Function
+      633(param):    112(ptr) Variable Function
+661(@patchConstantResult):    407(ptr) Variable Function
+      662(param):     85(ptr) Variable Function
+                              Line 1 158 0
+             582:    581(ptr) AccessChain 580(patch.Pos) 209
+             583:   18(fvec4) Load 582
+             584:     21(ptr) AccessChain 577(patch) 209 209
+                              Store 584 583
+             589:    588(ptr) AccessChain 587(patch.Normal) 209
+             590:   67(fvec3) Load 589
+             591:    562(ptr) AccessChain 577(patch) 209 210
+                              Store 591 590
+             596:    595(ptr) AccessChain 594(patch.UV) 209
+             597:   45(fvec2) Load 596
+             598:     47(ptr) AccessChain 577(patch) 209 417
+                              Store 598 597
+             599:    581(ptr) AccessChain 580(patch.Pos) 210
+             600:   18(fvec4) Load 599
+             601:     21(ptr) AccessChain 577(patch) 210 209
+                              Store 601 600
+             602:    588(ptr) AccessChain 587(patch.Normal) 210
+             603:   67(fvec3) Load 602
+             604:    562(ptr) AccessChain 577(patch) 210 210
+                              Store 604 603
+             605:    595(ptr) AccessChain 594(patch.UV) 210
+             606:   45(fvec2) Load 605
+             607:     47(ptr) AccessChain 577(patch) 210 417
+                              Store 607 606
+             608:    581(ptr) AccessChain 580(patch.Pos) 417
+             609:   18(fvec4) Load 608
+             610:     21(ptr) AccessChain 577(patch) 417 209
+                              Store 610 609
+             611:    588(ptr) AccessChain 587(patch.Normal) 417
+             612:   67(fvec3) Load 611
+             613:    562(ptr) AccessChain 577(patch) 417 210
+                              Store 613 612
+             614:    595(ptr) AccessChain 594(patch.UV) 417
+             615:   45(fvec2) Load 614
+             616:     47(ptr) AccessChain 577(patch) 417 417
+                              Store 616 615
+             617:    581(ptr) AccessChain 580(patch.Pos) 375
+             618:   18(fvec4) Load 617
+             619:     21(ptr) AccessChain 577(patch) 375 209
+                              Store 619 618
+             620:    588(ptr) AccessChain 587(patch.Normal) 375
+             621:   67(fvec3) Load 620
+             622:    562(ptr) AccessChain 577(patch) 375 210
+                              Store 622 621
+             623:    595(ptr) AccessChain 594(patch.UV) 375
+             624:   45(fvec2) Load 623
+             625:     47(ptr) AccessChain 577(patch) 375 417
+                              Store 625 624
+             629:     11(int) Load 628(InvocationID)
+                              Store 626(InvocationID) 629
+             632:          83 Load 577(patch)
+                              Store 631(param) 632
+             634:     11(int) Load 626(InvocationID)
+                              Store 633(param) 634
+             635:113(HSOutput) FunctionCall 126(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;) 631(param) 633(param)
+                              Store 630(flattenTemp) 635
+             638:     11(int) Load 628(InvocationID)
+             639:     21(ptr) AccessChain 630(flattenTemp) 209
+             640:   18(fvec4) Load 639
+             642:    641(ptr) AccessChain 637(@entryPointOutput.Pos) 638
+                              Store 642 640
+             645:     11(int) Load 628(InvocationID)
+             646:    562(ptr) AccessChain 630(flattenTemp) 210
+             647:   67(fvec3) Load 646
+             649:    648(ptr) AccessChain 644(@entryPointOutput.Normal) 645
+                              Store 649 647
+             652:     11(int) Load 628(InvocationID)
+             653:     47(ptr) AccessChain 630(flattenTemp) 417
+             654:   45(fvec2) Load 653
+             656:    655(ptr) AccessChain 651(@entryPointOutput.UV) 652
+                              Store 656 654
+                              ControlBarrier 43 19 16
+             657:     11(int) Load 628(InvocationID)
+             658:    48(bool) IEqual 657 209
+                              SelectionMerge 660 None
+                              BranchConditional 658 659 660
+             659:               Label
+             663:          83   Load 577(patch)
+                                Store 662(param) 663
+             664:90(ConstantsHSOutput)   FunctionCall 103(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];) 662(param)
+                                Store 661(@patchConstantResult) 664
+             667:    152(ptr)   AccessChain 661(@patchConstantResult) 209 209
+             668:    8(float)   Load 667
+             670:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 209
+                                Store 670 668
+             671:    152(ptr)   AccessChain 661(@patchConstantResult) 209 210
+             672:    8(float)   Load 671
+             673:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 210
+                                Store 673 672
+             674:    152(ptr)   AccessChain 661(@patchConstantResult) 209 417
+             675:    8(float)   Load 674
+             676:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 417
+                                Store 676 675
+             677:    152(ptr)   AccessChain 661(@patchConstantResult) 209 375
+             678:    8(float)   Load 677
+             679:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 375
+                                Store 679 678
+             682:    152(ptr)   AccessChain 661(@patchConstantResult) 210 209
+             683:    8(float)   Load 682
+             684:    669(ptr)   AccessChain 681(@patchConstantOutput.TessLevelInner) 209
+                                Store 684 683
+             685:    152(ptr)   AccessChain 661(@patchConstantResult) 210 210
+             686:    8(float)   Load 685
+             687:    669(ptr)   AccessChain 681(@patchConstantOutput.TessLevelInner) 210
+                                Store 687 686
+                                Branch 660
+             660:             Label
                               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
+                              Line 1 65 1
+26(screenSpaceTessFactor(vf4;vf4;):    8(float) Function None 22
+          24(p0):     21(ptr) FunctionParameter
+          25(p1):     21(ptr) FunctionParameter
+              34:             Label
+   141(midPoint):     21(ptr) Variable Function
+     153(radius):    152(ptr) Variable Function
+         164(v0):     21(ptr) Variable Function
+      217(clip0):     21(ptr) Variable Function
+      235(clip1):     21(ptr) Variable Function
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 28
+              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
+              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 37 24(p0) 40
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 41 25(p1) 40
+             137:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 28 26(screenSpaceTessFactor(vf4;vf4;)
+             138:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 28
+             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 140 140 16 16
+             144:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 142 141(midPoint) 40
+             146:   18(fvec4) Load 24(p0)
+             147:   18(fvec4) Load 25(p1)
+             148:   18(fvec4) FAdd 146 147
+             149:   18(fvec4) VectorTimesScalar 148 145
+                              Store 141(midPoint) 149
+             150:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 151 151 16 16
+             156:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 154 153(radius) 40
+             157:   18(fvec4) Load 24(p0)
+             158:   18(fvec4) Load 25(p1)
+             159:    8(float) ExtInst 3(GLSL.std.450) 67(Distance) 157 158
+             161:    8(float) FDiv 159 160
+                              Store 153(radius) 161
+             162:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 163 163 16 16
+             167:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 165 164(v0) 40
+             168:   18(fvec4) Load 141(midPoint)
+             212:    211(ptr) AccessChain 203 209 210
+             213:         169 Load 212
+             214:   18(fvec4) VectorTimesMatrix 168 213
+                              Store 164(v0) 214
+             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 216 216 16 16
+             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 218 217(clip0) 40
+             221:   18(fvec4) Load 164(v0)
+             222:    8(float) Load 153(radius)
+             225:    8(float) CompositeExtract 224 0
+             226:    8(float) CompositeExtract 224 1
+             227:    8(float) CompositeExtract 224 2
+             228:   18(fvec4) CompositeConstruct 222 225 226 227
+             229:   18(fvec4) FSub 221 228
+             230:    211(ptr) AccessChain 203 209 209
+             231:         169 Load 230
+             232:   18(fvec4) VectorTimesMatrix 229 231
+                              Store 217(clip0) 232
+             233:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 234 234 16 16
+             238:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 236 235(clip1) 40
+             239:   18(fvec4) Load 164(v0)
+             240:    8(float) Load 153(radius)
+             241:    8(float) CompositeExtract 224 0
+             242:    8(float) CompositeExtract 224 1
+             243:    8(float) CompositeExtract 224 2
+             244:   18(fvec4) CompositeConstruct 240 241 242 243
+             245:   18(fvec4) FAdd 239 244
+             246:    211(ptr) AccessChain 203 209 209
+             247:         169 Load 246
+             248:   18(fvec4) VectorTimesMatrix 245 247
+                              Store 235(clip1) 248
+             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 250 250 16 16
+             251:    152(ptr) AccessChain 217(clip0) 17
+             252:    8(float) Load 251
+             253:   18(fvec4) Load 217(clip0)
+             254:   18(fvec4) CompositeConstruct 252 252 252 252
+             255:   18(fvec4) FDiv 253 254
+                              Store 217(clip0) 255
+             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 257 257 16 16
+             258:    152(ptr) AccessChain 235(clip1) 17
+             259:    8(float) Load 258
+             260:   18(fvec4) Load 235(clip1)
+             261:   18(fvec4) CompositeConstruct 259 259 259 259
+             262:   18(fvec4) FDiv 260 261
+                              Store 235(clip1) 262
+             263:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 264 264 16 16
+             267:    266(ptr) AccessChain 203 209 265
+             268:   45(fvec2) Load 267
+             269:   18(fvec4) Load 217(clip0)
+             270:   45(fvec2) VectorShuffle 269 269 0 1
+             271:   45(fvec2) FMul 270 268
+             272:    152(ptr) AccessChain 217(clip0) 16
+             273:    8(float) CompositeExtract 271 0
+                              Store 272 273
+             274:    152(ptr) AccessChain 217(clip0) 32
+             275:    8(float) CompositeExtract 271 1
+                              Store 274 275
+             276:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 277 277 16 16
+             278:    266(ptr) AccessChain 203 209 265
+             279:   45(fvec2) Load 278
+             280:   18(fvec4) Load 235(clip1)
+             281:   45(fvec2) VectorShuffle 280 280 0 1
+             282:   45(fvec2) FMul 281 279
+             283:    152(ptr) AccessChain 235(clip1) 16
+             284:    8(float) CompositeExtract 282 0
+                              Store 283 284
+             285:    152(ptr) AccessChain 235(clip1) 32
+             286:    8(float) CompositeExtract 282 1
+                              Store 285 286
+             287:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 288 288 16 16
+             289:   18(fvec4) Load 217(clip0)
+             290:   18(fvec4) Load 235(clip1)
+             291:    8(float) ExtInst 3(GLSL.std.450) 67(Distance) 289 290
+             294:    293(ptr) AccessChain 203 209 292
+             295:    8(float) Load 294
+             296:    8(float) FDiv 291 295
+             298:    293(ptr) AccessChain 203 209 297
+             299:    8(float) Load 298
+             300:    8(float) FMul 296 299
+             303:    8(float) ExtInst 3(GLSL.std.450) 43(FClamp) 300 301 302
+                              ReturnValue 303
                               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
+                              Line 1 95 1
+55(frustumCheck(vf4;vf2;):    48(bool) Function None 51
+         53(Pos):     21(ptr) FunctionParameter
+        54(inUV):     47(ptr) FunctionParameter
+              58:             Label
+        310(pos):     21(ptr) Variable Function
+          355(i):    354(ptr) Variable Function
+              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 61 53(Pos) 40
+              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 64 54(inUV) 40
+             306:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 57 55(frustumCheck(vf4;vf2;)
+             307:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             308:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 309 309 16 16
+             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 311 310(pos) 40
+             314:   18(fvec4) Load 53(Pos)
+                              Store 310(pos) 314
+             315:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 316 316 16 16
+             326:         317 Load 323(textureHeight)
+             335:         327 Load 332(samplerHeight)
+             340:         336 SampledImage 326 335
+             341:   45(fvec2) Load 54(inUV)
+             342:   18(fvec4) ImageSampleExplicitLod 340 341 Lod 223
+             343:    8(float) CompositeExtract 342 0
+             345:    293(ptr) AccessChain 203 209 344
+             346:    8(float) Load 345
+             347:    8(float) FMul 343 346
+             348:    152(ptr) AccessChain 310(pos) 32
+             349:    8(float) Load 348
+             350:    8(float) FSub 349 347
+             351:    152(ptr) AccessChain 310(pos) 32
+                              Store 351 350
+             352:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
+             358:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 356 355(i) 40
+                              Store 355(i) 209
+                              Branch 359
+             359:             Label
+             363:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             364:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
+                              LoopMerge 361 362 None
+                              Branch 365
+             365:             Label
+             366:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             367:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
+             368:    206(int) Load 355(i)
+             370:    48(bool) SLessThan 368 265
+                              BranchConditional 370 360 361
+             360:               Label
+             371:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             372:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 373 373 16 16
+             374:   18(fvec4)   Load 310(pos)
+             376:    206(int)   Load 355(i)
+             378:    377(ptr)   AccessChain 203 209 375 376
+             379:   18(fvec4)   Load 378
+             380:    8(float)   Dot 374 379
+             382:    8(float)   FAdd 380 381
+             384:    48(bool)   FOrdLessThan 382 223
+                                SelectionMerge 386 None
+                                BranchConditional 384 385 386
+             385:                 Label
+             389:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             390:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 391 391 16 16
+                                  ReturnValue 388
+             386:               Label
+                                Branch 362
+             362:               Label
+             393:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             394:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
+             395:    206(int)   Load 355(i)
+             396:    206(int)   IAdd 395 210
+                                Store 355(i) 396
+                                Branch 359
+             361:             Label
+             398:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
+             399:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 400 400 16 16
+                              ReturnValue 171
                               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
+                              Line 1 112 1
+103(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];):90(ConstantsHSOutput) Function None 100
+      102(patch):     85(ptr) FunctionParameter
+             106:             Label
+     408(output):    407(ptr) Variable Function
+      418(param):     21(ptr) Variable Function
+      421(param):     47(ptr) Variable Function
+      462(param):     21(ptr) Variable Function
+      465(param):     21(ptr) Variable Function
+      472(param):     21(ptr) Variable Function
+      475(param):     21(ptr) Variable Function
+      482(param):     21(ptr) Variable Function
+      485(param):     21(ptr) Variable Function
+      492(param):     21(ptr) Variable Function
+      495(param):     21(ptr) Variable Function
+             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             108:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
+             111:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 109 102(patch) 40
+             403:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 105 103(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];)
+             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             405:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 406 406 16 16
+             411:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 409 408(output) 40
+                              Store 408(output) 414
+             415:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 416 416 16 16
+             419:     21(ptr) AccessChain 102(patch) 209 209
+             420:   18(fvec4) Load 419
+                              Store 418(param) 420
+             422:     47(ptr) AccessChain 102(patch) 209 417
+             423:   45(fvec2) Load 422
+                              Store 421(param) 423
+             424:    48(bool) FunctionCall 55(frustumCheck(vf4;vf2;) 418(param) 421(param)
+             427:    48(bool) LogicalNot 424
+                              SelectionMerge 429 None
+                              BranchConditional 427 428 449
+             428:               Label
+             430:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             431:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 432 432 16 16
+             433:    152(ptr)   AccessChain 408(output) 210 209
+                                Store 433 223
+             434:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 435 435 16 16
+             436:    152(ptr)   AccessChain 408(output) 210 210
+                                Store 436 223
+             437:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 438 438 16 16
+             439:    152(ptr)   AccessChain 408(output) 209 209
+                                Store 439 223
+             440:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 441 441 16 16
+             442:    152(ptr)   AccessChain 408(output) 209 210
+                                Store 442 223
+             443:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 444 444 16 16
+             445:    152(ptr)   AccessChain 408(output) 209 417
+                                Store 445 223
+             446:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 447 447 16 16
+             448:    152(ptr)   AccessChain 408(output) 209 375
+                                Store 448 223
+                                Branch 429
+             449:               Label
+             450:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             451:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 452 452 16 16
+             453:    293(ptr)   AccessChain 203 209 297
+             454:    8(float)   Load 453
+             456:    48(bool)   FOrdGreaterThan 454 223
+                                SelectionMerge 458 None
+                                BranchConditional 456 457 516
+             457:                 Label
+             459:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             460:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 461 461 16 16
+             463:     21(ptr)     AccessChain 102(patch) 375 209
+             464:   18(fvec4)     Load 463
+                                  Store 462(param) 464
+             466:     21(ptr)     AccessChain 102(patch) 209 209
+             467:   18(fvec4)     Load 466
+                                  Store 465(param) 467
+             468:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 462(param) 465(param)
+             469:    152(ptr)     AccessChain 408(output) 209 209
+                                  Store 469 468
+             470:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 471 471 16 16
+             473:     21(ptr)     AccessChain 102(patch) 209 209
+             474:   18(fvec4)     Load 473
+                                  Store 472(param) 474
+             476:     21(ptr)     AccessChain 102(patch) 210 209
+             477:   18(fvec4)     Load 476
+                                  Store 475(param) 477
+             478:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 472(param) 475(param)
+             479:    152(ptr)     AccessChain 408(output) 209 210
+                                  Store 479 478
+             480:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 481 481 16 16
+             483:     21(ptr)     AccessChain 102(patch) 210 209
+             484:   18(fvec4)     Load 483
+                                  Store 482(param) 484
+             486:     21(ptr)     AccessChain 102(patch) 417 209
+             487:   18(fvec4)     Load 486
+                                  Store 485(param) 487
+             488:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 482(param) 485(param)
+             489:    152(ptr)     AccessChain 408(output) 209 417
+                                  Store 489 488
+             490:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 491 491 16 16
+             493:     21(ptr)     AccessChain 102(patch) 417 209
+             494:   18(fvec4)     Load 493
+                                  Store 492(param) 494
+             496:     21(ptr)     AccessChain 102(patch) 375 209
+             497:   18(fvec4)     Load 496
+                                  Store 495(param) 497
+             498:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 492(param) 495(param)
+             499:    152(ptr)     AccessChain 408(output) 209 375
+                                  Store 499 498
+             500:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 501 501 16 16
+             502:    152(ptr)     AccessChain 408(output) 209 209
+             503:    8(float)     Load 502
+             504:    152(ptr)     AccessChain 408(output) 209 375
+             505:    8(float)     Load 504
+             506:    8(float)     ExtInst 3(GLSL.std.450) 46(FMix) 503 505 145
+             507:    152(ptr)     AccessChain 408(output) 210 209
+                                  Store 507 506
+             508:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 509 509 16 16
+             510:    152(ptr)     AccessChain 408(output) 209 417
+             511:    8(float)     Load 510
+             512:    152(ptr)     AccessChain 408(output) 209 210
+             513:    8(float)     Load 512
+             514:    8(float)     ExtInst 3(GLSL.std.450) 46(FMix) 511 513 145
+             515:    152(ptr)     AccessChain 408(output) 210 210
+                                  Store 515 514
+                                  Branch 458
+             516:                 Label
+             517:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             518:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 519 519 16 16
+             520:    152(ptr)     AccessChain 408(output) 210 209
+                                  Store 520 301
+             521:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 522 522 16 16
+             523:    152(ptr)     AccessChain 408(output) 210 210
+                                  Store 523 301
+             524:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 525 525 16 16
+             526:    152(ptr)     AccessChain 408(output) 209 209
+                                  Store 526 301
+             527:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 528 528 16 16
+             529:    152(ptr)     AccessChain 408(output) 209 210
+                                  Store 529 301
+             530:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 531 531 16 16
+             532:    152(ptr)     AccessChain 408(output) 209 417
+                                  Store 532 301
+             533:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 534 534 16 16
+             535:    152(ptr)     AccessChain 408(output) 209 375
+                                  Store 535 301
+                                  Branch 458
+             458:               Label
+                                Branch 429
+             429:             Label
+             536:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             537:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 538 538 16 16
+             539:90(ConstantsHSOutput) Load 408(output)
+                              ReturnValue 539
                               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
+                              Line 1 158 1
+126(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;):113(HSOutput) Function None 122
+      124(patch):     85(ptr) FunctionParameter
+125(InvocationID):    112(ptr) FunctionParameter
+             129:             Label
+     547(output):    546(ptr) Variable Function
+             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 128
+             131:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
+             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 132 124(patch) 40
+             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 134 125(InvocationID) 40
+             542:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 128 126(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;)
+             543:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 128
+             544:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 545 545 16 16
+             549:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 548 547(output) 40
+                              Store 547(output) 552
+             553:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 554 554 16 16
+             555:     11(int) Load 125(InvocationID)
+             556:     21(ptr) AccessChain 124(patch) 555 209
+             557:   18(fvec4) Load 556
+             558:     21(ptr) AccessChain 547(output) 209
+                              Store 558 557
+             559:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 560 560 16 16
+             561:     11(int) Load 125(InvocationID)
+             563:    562(ptr) AccessChain 124(patch) 561 210
+             564:   67(fvec3) Load 563
+             565:    562(ptr) AccessChain 547(output) 210
+                              Store 565 564
+             566:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 567 567 16 16
+             568:     11(int) Load 125(InvocationID)
+             569:     47(ptr) AccessChain 124(patch) 568 417
+             570:   45(fvec2) Load 569
+             571:     47(ptr) AccessChain 547(output) 417
+                              Store 571 570
+             572:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 573 573 16 16
+             574:113(HSOutput) Load 547(output)
+                              ReturnValue 574
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.tese.out b/Test/baseResults/spv.debuginfo.hlsl.tese.out
index 939f64a..d5b571c 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.tese.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.tese.out
@@ -1,589 +1,626 @@
 spv.debuginfo.hlsl.tese
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 434
+// Id's are bound by 461
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint TessellationEvaluation 6  "main" 352 367 376 385 392 398 438 442 446 449 452 455 458
+                              ExecutionMode 6 Quads
+               1:             String  ""
+              10:             String  "float"
+              13:             String  "uint"
+              26:             String  "TessLevelOuter"
+              28:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+              32:             String  "TessLevelInner"
+              35:             String  "ConstantsHSOutput"
+              49:             String  "Pos"
+              52:             String  "Normal"
+              56:             String  "UV"
+              60:             String  "HSOutput"
+              68:             String  "WorldPos"
+              78:             String  "DSOutput"
+              85:             String  "@main"
+              91:             String  "input"
+              95:             String  "TessCoord"
+              98:             String  "patch"
+             107:             String  "output"
+             118:             String  "uv1"
+             121:             String  "int"
+             137:             String  "uv2"
+             160:             String  "n1"
+             172:             String  "n2"
+             194:             String  "pos1"
+             206:             String  "pos2"
+             218:             String  "pos"
+             230:             String  "type.2d.image"
+             231:             String  "@type.2d.image"
+             236:             String  "displacementMapTexture"
+             241:             String  "type.sampler"
+             242:             String  "@type.sampler"
+             246:             String  "displacementMapSampler"
+             250:             String  "type.sampled.image"
+             251:             String  "@type.sampled.image"
+             265:             String  "modelview"
+             270:             String  "lightPos"
+             274:             String  "frustumPlanes"
+             277:             String  "tessellatedEdgeSize"
+             281:             String  "viewportDim"
+             285:             String  "UBO"
+             288:             String  "ubo"
+                              Name 6  "main"
+                              Name 24  "ConstantsHSOutput"
+                              MemberName 24(ConstantsHSOutput) 0  "TessLevelOuter"
+                              MemberName 24(ConstantsHSOutput) 1  "TessLevelInner"
+                              Name 47  "HSOutput"
+                              MemberName 47(HSOutput) 0  "Pos"
+                              MemberName 47(HSOutput) 1  "Normal"
+                              MemberName 47(HSOutput) 2  "UV"
+                              Name 63  "DSOutput"
+                              MemberName 63(DSOutput) 0  "Pos"
+                              MemberName 63(DSOutput) 1  "Normal"
+                              MemberName 63(DSOutput) 2  "UV"
+                              MemberName 63(DSOutput) 3  "ViewVec"
+                              MemberName 63(DSOutput) 4  "LightVec"
+                              MemberName 63(DSOutput) 5  "EyePos"
+                              MemberName 63(DSOutput) 6  "WorldPos"
+                              Name 84  "@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];"
+                              Name 81  "input"
+                              Name 82  "TessCoord"
+                              Name 83  "patch"
+                              Name 105  "output"
+                              Name 116  "uv1"
+                              Name 135  "uv2"
+                              Name 158  "n1"
+                              Name 170  "n2"
+                              Name 192  "pos1"
+                              Name 204  "pos2"
+                              Name 216  "pos"
+                              Name 234  "displacementMapTexture"
+                              Name 244  "displacementMapSampler"
+                              Name 263  "UBO"
+                              MemberName 263(UBO) 0  "projection"
+                              MemberName 263(UBO) 1  "modelview"
+                              MemberName 263(UBO) 2  "lightPos"
+                              MemberName 263(UBO) 3  "frustumPlanes"
+                              MemberName 263(UBO) 4  "displacementFactor"
+                              MemberName 263(UBO) 5  "tessellationFactor"
+                              MemberName 263(UBO) 6  "viewportDim"
+                              MemberName 263(UBO) 7  "tessellatedEdgeSize"
+                              Name 286  "ubo"
+                              MemberName 286(ubo) 0  "ubo"
+                              Name 291  ""
+                              Name 350  "input"
+                              Name 352  "input.TessLevelOuter"
+                              Name 367  "input.TessLevelInner"
+                              Name 374  "TessCoord"
+                              Name 376  "TessCoord"
+                              Name 382  "patch"
+                              Name 385  "patch.Pos"
+                              Name 392  "patch.Normal"
+                              Name 398  "patch.UV"
+                              Name 430  "flattenTemp"
+                              Name 432  "param"
+                              Name 434  "param"
+                              Name 438  "@entryPointOutput.Pos"
+                              Name 442  "@entryPointOutput.Normal"
+                              Name 446  "@entryPointOutput.UV"
+                              Name 449  "@entryPointOutput.ViewVec"
+                              Name 452  "@entryPointOutput.LightVec"
+                              Name 455  "@entryPointOutput.EyePos"
+                              Name 458  "@entryPointOutput.WorldPos"
+                              Decorate 234(displacementMapTexture) DescriptorSet 0
+                              Decorate 234(displacementMapTexture) Binding 1
+                              Decorate 244(displacementMapSampler) DescriptorSet 0
+                              Decorate 244(displacementMapSampler) Binding 1
+                              Decorate 261 ArrayStride 16
+                              MemberDecorate 263(UBO) 0 RowMajor
+                              MemberDecorate 263(UBO) 0 Offset 0
+                              MemberDecorate 263(UBO) 0 MatrixStride 16
+                              MemberDecorate 263(UBO) 1 RowMajor
+                              MemberDecorate 263(UBO) 1 Offset 64
+                              MemberDecorate 263(UBO) 1 MatrixStride 16
+                              MemberDecorate 263(UBO) 2 Offset 128
+                              MemberDecorate 263(UBO) 3 Offset 144
+                              MemberDecorate 263(UBO) 4 Offset 240
+                              MemberDecorate 263(UBO) 5 Offset 244
+                              MemberDecorate 263(UBO) 6 Offset 248
+                              MemberDecorate 263(UBO) 7 Offset 256
+                              MemberDecorate 286(ubo) 0 Offset 0
+                              Decorate 286(ubo) Block
+                              Decorate 291 DescriptorSet 0
+                              Decorate 291 Binding 0
+                              Decorate 352(input.TessLevelOuter) Patch
+                              Decorate 352(input.TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 367(input.TessLevelInner) Patch
+                              Decorate 367(input.TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 376(TessCoord) Patch
+                              Decorate 376(TessCoord) BuiltIn TessCoord
+                              Decorate 385(patch.Pos) BuiltIn Position
+                              Decorate 392(patch.Normal) Location 0
+                              Decorate 398(patch.UV) Location 1
+                              Decorate 438(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 442(@entryPointOutput.Normal) Location 0
+                              Decorate 446(@entryPointOutput.UV) Location 1
+                              Decorate 449(@entryPointOutput.ViewVec) Location 2
+                              Decorate 452(@entryPointOutput.LightVec) Location 3
+                              Decorate 455(@entryPointOutput.EyePos) Location 4
+                              Decorate 458(@entryPointOutput.WorldPos) Location 5
+               4:             TypeVoid
+               5:             TypeFunction 4
+               8:             TypeFloat 32
+              11:             TypeInt 32 0
+              14:     11(int) Constant 32
+              15:     11(int) Constant 6
+              16:     11(int) Constant 0
+              12:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 13 14 15 16
+              17:     11(int) Constant 3
+               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 10 14 17 16
+              18:     11(int) Constant 4
+              19:             TypeArray 8(float) 18
+              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 9 18
+              21:     11(int) Constant 2
+              22:             TypeArray 8(float) 21
+              23:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 9 21
+24(ConstantsHSOutput):             TypeStruct 19 22
+              27:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 28
+              29:     11(int) Constant 51
+              30:     11(int) Constant 25
+              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 26 20 27 29 30 16 16 17
+              33:     11(int) Constant 52
+              31:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 32 23 27 33 30 16 16 17
+              36:     11(int) Constant 1
+              38:     11(int) Constant 5
+              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 36 18 27 38
+              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 35 36 27 16 16 37 35 16 17 25 31
+              39:             TypePointer Function 24(ConstantsHSOutput)
+              40:             TypeVector 8(float) 2
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 21
+              42:             TypePointer Function 40(fvec2)
+              43:             TypeVector 8(float) 4
+              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 18
+              45:             TypeVector 8(float) 3
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 17
+    47(HSOutput):             TypeStruct 43(fvec4) 45(fvec3) 40(fvec2)
+              50:     11(int) Constant 44
+              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 49 44 27 50 14 16 16 17
+              53:     11(int) Constant 45
+              54:     11(int) Constant 35
+              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 46 27 53 54 16 16 17
+              57:     11(int) Constant 46
+              58:     11(int) Constant 31
+              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 56 41 27 57 58 16 16 17
+              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 60 36 27 16 16 37 60 16 17 48 51 55
+              61:             TypeArray 47(HSOutput) 18
+              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 59 18
+    63(DSOutput):             TypeStruct 43(fvec4) 45(fvec3) 40(fvec2) 45(fvec3) 45(fvec3) 45(fvec3) 45(fvec3)
+              65:     11(int) Constant 57
+              66:     11(int) Constant 13
+              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 49 44 27 65 66 16 16 17
+              69:     11(int) Constant 63
+              70:     11(int) Constant 37
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
+              72:     11(int) Constant 59
+              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 56 41 27 72 58 16 16 17
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
+              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
+              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
+              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
+              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 78 36 27 16 16 37 78 16 17 64 67 71 73 74 75 76
+              79:             TypeFunction 63(DSOutput) 39(ptr) 42(ptr) 61
+              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 77 34 41 59
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 85 80 27 16 16 37 85 17 16
+              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 91 34 27 16 16 86 18 36
+              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 95 41 27 16 16 86 18 21
+              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 98 59 27 16 16 86 18 17
+             103:     11(int) Constant 70
+             104:             TypePointer Function 63(DSOutput)
+             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 107 77 27 103 16 86 18
+             109:    8(float) Constant 0
+             110:   43(fvec4) ConstantComposite 109 109 109 109
+             111:   45(fvec3) ConstantComposite 109 109 109
+             112:   40(fvec2) ConstantComposite 109 109
+             113:63(DSOutput) ConstantComposite 110 111 112 111 111 111 111
+             115:     11(int) Constant 71
+             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 118 41 27 115 16 86 18
+             120:             TypeInt 32 1
+             122:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 121 14 18 16
+             123:    120(int) Constant 0
+             124:    120(int) Constant 2
+             126:    120(int) Constant 1
+             128:             TypePointer Function 8(float)
+             134:     11(int) Constant 72
+             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 137 41 27 134 16 86 18
+             139:    120(int) Constant 3
+             147:     11(int) Constant 73
+             156:     11(int) Constant 75
+             157:             TypePointer Function 45(fvec3)
+             159:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 160 46 27 156 16 86 18
+             169:     11(int) Constant 76
+             171:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 172 46 27 169 16 86 18
+             181:     11(int) Constant 77
+             190:     11(int) Constant 80
+             191:             TypePointer Function 43(fvec4)
+             193:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 194 44 27 190 16 86 18
+             203:     11(int) Constant 81
+             205:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 206 44 27 203 16 86 18
+             215:     11(int) Constant 82
+             217:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 218 44 27 215 16 86 18
+             227:     11(int) Constant 84
+             228:             TypeImage 8(float) 2D sampled format:Unknown
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             229:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 230 16 27 227 16 37 231 232 17
+             233:             TypePointer UniformConstant 228
+234(displacementMapTexture):    233(ptr) Variable UniformConstant
+             237:     11(int) Constant 8
+             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 236 229 27 227 16 37 236 234(displacementMapTexture) 237
+             239:             TypeSampler
+             240:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 241 36 27 227 16 37 242 232 17
+             243:             TypePointer UniformConstant 239
+244(displacementMapSampler):    243(ptr) Variable UniformConstant
+             245:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 246 240 27 227 16 37 246 244(displacementMapSampler) 237
+             248:             TypeSampledImage 228
+             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 250 16 27 227 16 37 251 232 17
+             257:             TypeMatrix 43(fvec4) 4
+             259:             TypeBool
+             260:   259(bool) ConstantTrue
+             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 44 18 260
+             261:             TypeArray 43(fvec4) 15
+             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 44 15
+        263(UBO):             TypeStruct 257 257 43(fvec4) 261 8(float) 8(float) 40(fvec2) 8(float)
+             266:     11(int) Constant 29
+             267:     11(int) Constant 20
+             264:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 265 258 27 266 267 16 16 17
+             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 265 258 27 266 267 16 16 17
+             271:     11(int) Constant 30
+             272:     11(int) Constant 17
+             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 270 44 27 271 272 16 16 17
+             275:     11(int) Constant 22
+             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 274 262 27 58 275 16 16 17
+             278:     11(int) Constant 27
+             276:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 277 9 27 54 278 16 16 17
+             279:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 277 9 27 54 278 16 16 17
+             282:     11(int) Constant 34
+             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 281 41 27 282 267 16 16 17
+             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 277 9 27 54 278 16 16 17
+             284:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 285 36 27 227 16 37 285 16 17 264 268 269 273 276 279 280 283
+        286(ubo):             TypeStruct 263(UBO)
+             287:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 288 284 27 70 70 16 16 17
+             289:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 288 36 27 227 16 37 288 16 17 287
+             290:             TypePointer Uniform 286(ubo)
+             291:    290(ptr) Variable Uniform
+             292:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 289 27 227 16 37 1 291 237
+             293:    120(int) Constant 4
+             294:             TypePointer Uniform 8(float)
+             303:     11(int) Constant 86
+             305:             TypePointer Uniform 257
+             314:     11(int) Constant 89
+             320:     11(int) Constant 90
+             321:             TypePointer Uniform 43(fvec4)
+             331:     11(int) Constant 91
+             332:    120(int) Constant 6
+             337:     11(int) Constant 92
+             338:    120(int) Constant 5
+             346:     11(int) Constant 93
+             351:             TypePointer Input 19
+352(input.TessLevelOuter):    351(ptr) Variable Input
+             353:             TypePointer Input 8(float)
+             366:             TypePointer Input 22
+367(input.TessLevelInner):    366(ptr) Variable Input
+             375:             TypePointer Input 45(fvec3)
+  376(TessCoord):    375(ptr) Variable Input
+             381:             TypePointer Function 61
+             383:             TypeArray 43(fvec4) 18
+             384:             TypePointer Input 383
+  385(patch.Pos):    384(ptr) Variable Input
+             386:             TypePointer Input 43(fvec4)
+             390:             TypeArray 45(fvec3) 18
+             391:             TypePointer Input 390
+392(patch.Normal):    391(ptr) Variable Input
+             396:             TypeArray 40(fvec2) 18
+             397:             TypePointer Input 396
+   398(patch.UV):    397(ptr) Variable Input
+             399:             TypePointer Input 40(fvec2)
+             437:             TypePointer Output 43(fvec4)
+438(@entryPointOutput.Pos):    437(ptr) Variable Output
+             441:             TypePointer Output 45(fvec3)
+442(@entryPointOutput.Normal):    441(ptr) Variable Output
+             445:             TypePointer Output 40(fvec2)
+446(@entryPointOutput.UV):    445(ptr) Variable Output
+449(@entryPointOutput.ViewVec):    441(ptr) Variable Output
+452(@entryPointOutput.LightVec):    441(ptr) Variable Output
+455(@entryPointOutput.EyePos):    441(ptr) Variable Output
+458(@entryPointOutput.WorldPos):    441(ptr) Variable Output
+                              Line 1 68 1
+         6(main):           4 Function None 5
+               7:             Label
+      350(input):     39(ptr) Variable Function
+  374(TessCoord):     42(ptr) Variable Function
+      382(patch):    381(ptr) Variable Function
+430(flattenTemp):    104(ptr) Variable Function
+      432(param):     39(ptr) Variable Function
+      434(param):     42(ptr) Variable Function
+                              Line 1 68 0
+             354:    353(ptr) AccessChain 352(input.TessLevelOuter) 123
+             355:    8(float) Load 354
+             356:    128(ptr) AccessChain 350(input) 123 123
+                              Store 356 355
+             357:    353(ptr) AccessChain 352(input.TessLevelOuter) 126
+             358:    8(float) Load 357
+             359:    128(ptr) AccessChain 350(input) 123 126
+                              Store 359 358
+             360:    353(ptr) AccessChain 352(input.TessLevelOuter) 124
+             361:    8(float) Load 360
+             362:    128(ptr) AccessChain 350(input) 123 124
                               Store 362 361
-             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
+             363:    353(ptr) AccessChain 352(input.TessLevelOuter) 139
+             364:    8(float) Load 363
+             365:    128(ptr) AccessChain 350(input) 123 139
+                              Store 365 364
+             368:    353(ptr) AccessChain 367(input.TessLevelInner) 123
+             369:    8(float) Load 368
+             370:    128(ptr) AccessChain 350(input) 126 123
+                              Store 370 369
+             371:    353(ptr) AccessChain 367(input.TessLevelInner) 126
+             372:    8(float) Load 371
+             373:    128(ptr) AccessChain 350(input) 126 126
+                              Store 373 372
+             377:   45(fvec3) Load 376(TessCoord)
+             378:    8(float) CompositeExtract 377 0
+             379:    8(float) CompositeExtract 377 1
+             380:   40(fvec2) CompositeConstruct 378 379
+                              Store 374(TessCoord) 380
+             387:    386(ptr) AccessChain 385(patch.Pos) 123
+             388:   43(fvec4) Load 387
+             389:    191(ptr) AccessChain 382(patch) 123 123
+                              Store 389 388
+             393:    375(ptr) AccessChain 392(patch.Normal) 123
+             394:   45(fvec3) Load 393
+             395:    157(ptr) AccessChain 382(patch) 123 126
+                              Store 395 394
+             400:    399(ptr) AccessChain 398(patch.UV) 123
+             401:   40(fvec2) Load 400
+             402:     42(ptr) AccessChain 382(patch) 123 124
                               Store 402 401
-             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
+             403:    386(ptr) AccessChain 385(patch.Pos) 126
+             404:   43(fvec4) Load 403
+             405:    191(ptr) AccessChain 382(patch) 126 123
+                              Store 405 404
+             406:    375(ptr) AccessChain 392(patch.Normal) 126
+             407:   45(fvec3) Load 406
+             408:    157(ptr) AccessChain 382(patch) 126 126
+                              Store 408 407
+             409:    399(ptr) AccessChain 398(patch.UV) 126
+             410:   40(fvec2) Load 409
+             411:     42(ptr) AccessChain 382(patch) 126 124
+                              Store 411 410
+             412:    386(ptr) AccessChain 385(patch.Pos) 124
+             413:   43(fvec4) Load 412
+             414:    191(ptr) AccessChain 382(patch) 124 123
+                              Store 414 413
+             415:    375(ptr) AccessChain 392(patch.Normal) 124
+             416:   45(fvec3) Load 415
+             417:    157(ptr) AccessChain 382(patch) 124 126
+                              Store 417 416
+             418:    399(ptr) AccessChain 398(patch.UV) 124
+             419:   40(fvec2) Load 418
+             420:     42(ptr) AccessChain 382(patch) 124 124
+                              Store 420 419
+             421:    386(ptr) AccessChain 385(patch.Pos) 139
+             422:   43(fvec4) Load 421
+             423:    191(ptr) AccessChain 382(patch) 139 123
+                              Store 423 422
+             424:    375(ptr) AccessChain 392(patch.Normal) 139
+             425:   45(fvec3) Load 424
+             426:    157(ptr) AccessChain 382(patch) 139 126
+                              Store 426 425
+             427:    399(ptr) AccessChain 398(patch.UV) 139
+             428:   40(fvec2) Load 427
+             429:     42(ptr) AccessChain 382(patch) 139 124
+                              Store 429 428
+             431:          61 Load 382(patch)
+             433:24(ConstantsHSOutput) Load 350(input)
+                              Store 432(param) 433
+             435:   40(fvec2) Load 374(TessCoord)
+                              Store 434(param) 435
+             436:63(DSOutput) FunctionCall 84(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];) 432(param) 434(param) 431
+                              Store 430(flattenTemp) 436
+             439:    191(ptr) AccessChain 430(flattenTemp) 123
+             440:   43(fvec4) Load 439
+                              Store 438(@entryPointOutput.Pos) 440
+             443:    157(ptr) AccessChain 430(flattenTemp) 126
+             444:   45(fvec3) Load 443
+                              Store 442(@entryPointOutput.Normal) 444
+             447:     42(ptr) AccessChain 430(flattenTemp) 124
+             448:   40(fvec2) Load 447
+                              Store 446(@entryPointOutput.UV) 448
+             450:    157(ptr) AccessChain 430(flattenTemp) 139
+             451:   45(fvec3) Load 450
+                              Store 449(@entryPointOutput.ViewVec) 451
+             453:    157(ptr) AccessChain 430(flattenTemp) 293
+             454:   45(fvec3) Load 453
+                              Store 452(@entryPointOutput.LightVec) 454
+             456:    157(ptr) AccessChain 430(flattenTemp) 338
+             457:   45(fvec3) Load 456
+                              Store 455(@entryPointOutput.EyePos) 457
+             459:    157(ptr) AccessChain 430(flattenTemp) 332
+             460:   45(fvec3) Load 459
+                              Store 458(@entryPointOutput.WorldPos) 460
                               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
+                              Line 1 68 1
+84(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];):63(DSOutput) Function None 79
+       81(input):     39(ptr) FunctionParameter
+   82(TessCoord):     42(ptr) FunctionParameter
+       83(patch):          61 FunctionParameter
+              87:             Label
+     105(output):    104(ptr) Variable Function
+        116(uv1):     42(ptr) Variable Function
+        135(uv2):     42(ptr) Variable Function
+         158(n1):    157(ptr) Variable Function
+         170(n2):    157(ptr) Variable Function
+       192(pos1):    191(ptr) Variable Function
+       204(pos2):    191(ptr) Variable Function
+        216(pos):    191(ptr) Variable Function
+              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 86
+              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 16 16 16 16
+              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 90 81(input) 93
+              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 94 82(TessCoord) 93
+              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 97 83(patch) 93
+             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 86 84(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];)
+             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 86
+             102:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 103 103 16 16
+             108:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 106 105(output) 93
+                              Store 105(output) 113
+             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 115 115 16 16
+             119:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 117 116(uv1) 93
+             125:   40(fvec2) CompositeExtract 83(patch) 0 2
+             127:   40(fvec2) CompositeExtract 83(patch) 1 2
+             129:    128(ptr) AccessChain 82(TessCoord) 16
+             130:    8(float) Load 129
+             131:   40(fvec2) CompositeConstruct 130 130
+             132:   40(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 125 127 131
+                              Store 116(uv1) 132
+             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 134 134 16 16
+             138:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 136 135(uv2) 93
+             140:   40(fvec2) CompositeExtract 83(patch) 3 2
+             141:   40(fvec2) CompositeExtract 83(patch) 2 2
+             142:    128(ptr) AccessChain 82(TessCoord) 16
+             143:    8(float) Load 142
+             144:   40(fvec2) CompositeConstruct 143 143
+             145:   40(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 140 141 144
+                              Store 135(uv2) 145
+             146:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 147 147 16 16
+             148:   40(fvec2) Load 116(uv1)
+             149:   40(fvec2) Load 135(uv2)
+             150:    128(ptr) AccessChain 82(TessCoord) 36
+             151:    8(float) Load 150
+             152:   40(fvec2) CompositeConstruct 151 151
+             153:   40(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 148 149 152
+             154:     42(ptr) AccessChain 105(output) 124
+                              Store 154 153
+             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 156 156 16 16
+             161:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 159 158(n1) 93
+             162:   45(fvec3) CompositeExtract 83(patch) 0 1
+             163:   45(fvec3) CompositeExtract 83(patch) 1 1
+             164:    128(ptr) AccessChain 82(TessCoord) 16
+             165:    8(float) Load 164
+             166:   45(fvec3) CompositeConstruct 165 165 165
+             167:   45(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 162 163 166
+                              Store 158(n1) 167
+             168:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 169 169 16 16
+             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 171 170(n2) 93
+             174:   45(fvec3) CompositeExtract 83(patch) 3 1
+             175:   45(fvec3) CompositeExtract 83(patch) 2 1
+             176:    128(ptr) AccessChain 82(TessCoord) 16
+             177:    8(float) Load 176
+             178:   45(fvec3) CompositeConstruct 177 177 177
+             179:   45(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 174 175 178
+                              Store 170(n2) 179
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 181 181 16 16
+             182:   45(fvec3) Load 158(n1)
+             183:   45(fvec3) Load 170(n2)
+             184:    128(ptr) AccessChain 82(TessCoord) 36
+             185:    8(float) Load 184
+             186:   45(fvec3) CompositeConstruct 185 185 185
+             187:   45(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 182 183 186
+             188:    157(ptr) AccessChain 105(output) 126
+                              Store 188 187
+             189:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 190 190 16 16
+             195:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 193 192(pos1) 93
+             196:   43(fvec4) CompositeExtract 83(patch) 0 0
+             197:   43(fvec4) CompositeExtract 83(patch) 1 0
+             198:    128(ptr) AccessChain 82(TessCoord) 16
+             199:    8(float) Load 198
+             200:   43(fvec4) CompositeConstruct 199 199 199 199
+             201:   43(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 196 197 200
+                              Store 192(pos1) 201
+             202:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 203 203 16 16
+             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 205 204(pos2) 93
+             208:   43(fvec4) CompositeExtract 83(patch) 3 0
+             209:   43(fvec4) CompositeExtract 83(patch) 2 0
+             210:    128(ptr) AccessChain 82(TessCoord) 16
+             211:    8(float) Load 210
+             212:   43(fvec4) CompositeConstruct 211 211 211 211
+             213:   43(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 208 209 212
+                              Store 204(pos2) 213
+             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 215 215 16 16
+             219:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 217 216(pos) 93
+             220:   43(fvec4) Load 192(pos1)
+             221:   43(fvec4) Load 204(pos2)
+             222:    128(ptr) AccessChain 82(TessCoord) 36
+             223:    8(float) Load 222
+             224:   43(fvec4) CompositeConstruct 223 223 223 223
+             225:   43(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 220 221 224
+                              Store 216(pos) 225
+             226:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 227 227 16 16
+             238:         228 Load 234(displacementMapTexture)
+             247:         239 Load 244(displacementMapSampler)
+             252:         248 SampledImage 238 247
+             253:     42(ptr) AccessChain 105(output) 124
+             254:   40(fvec2) Load 253
+             255:   43(fvec4) ImageSampleExplicitLod 252 254 Lod 109
+             256:    8(float) CompositeExtract 255 0
+             295:    294(ptr) AccessChain 291 123 293
+             296:    8(float) Load 295
+             297:    8(float) FMul 256 296
+             298:    128(ptr) AccessChain 216(pos) 36
+             299:    8(float) Load 298
+             300:    8(float) FSub 299 297
+             301:    128(ptr) AccessChain 216(pos) 36
+                              Store 301 300
+             302:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 303 303 16 16
+             304:   43(fvec4) Load 216(pos)
+             306:    305(ptr) AccessChain 291 123 126
+             307:         257 Load 306
+             308:   43(fvec4) VectorTimesMatrix 304 307
+             309:    305(ptr) AccessChain 291 123 123
+             310:         257 Load 309
+             311:   43(fvec4) VectorTimesMatrix 308 310
+             312:    191(ptr) AccessChain 105(output) 123
                               Store 312 311
-             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
+             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 314 314 16 16
+             315:   43(fvec4) Load 216(pos)
+             316:   45(fvec3) VectorShuffle 315 315 0 1 2
+             317:   45(fvec3) FNegate 316
+             318:    157(ptr) AccessChain 105(output) 139
+                              Store 318 317
+             319:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 320 320 16 16
+             322:    321(ptr) AccessChain 291 123 124
+             323:   43(fvec4) Load 322
+             324:   45(fvec3) VectorShuffle 323 323 0 1 2
+             325:    157(ptr) AccessChain 105(output) 139
+             326:   45(fvec3) Load 325
+             327:   45(fvec3) FAdd 324 326
+             328:   45(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 327
+             329:    157(ptr) AccessChain 105(output) 293
+                              Store 329 328
+             330:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 331 331 16 16
+             333:   43(fvec4) Load 216(pos)
+             334:   45(fvec3) VectorShuffle 333 333 0 1 2
+             335:    157(ptr) AccessChain 105(output) 332
+                              Store 335 334
+             336:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 337 337 16 16
+             339:   43(fvec4) Load 216(pos)
+             340:    305(ptr) AccessChain 291 123 126
+             341:         257 Load 340
+             342:   43(fvec4) VectorTimesMatrix 339 341
+             343:   45(fvec3) VectorShuffle 342 342 0 1 2
+             344:    157(ptr) AccessChain 105(output) 338
+                              Store 344 343
+             345:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 346 346 16 16
+             347:63(DSOutput) Load 105(output)
+                              ReturnValue 347
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.vert.out b/Test/baseResults/spv.debuginfo.hlsl.vert.out
index a7af432..2fa1774 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.vert.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.vert.out
@@ -1,574 +1,642 @@
 spv.debuginfo.hlsl.vert
-Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 437
+// Id's are bound by 495
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
-               2:             ExtInstImport  "GLSL.std.450"
+               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             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
+                              EntryPoint Vertex 6  "main" 444 447 451 454 457 460 464 468 476 480 483 486 489 492
+               1:             String  ""
+              10:             String  "float"
+              13:             String  "uint"
+              24:             String  "int"
+              29:             String  "instanceRot"
+              31:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed entry-point main
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed hlsl-offsets
+#line 1
+"
+              36:             String  "UV"
+              43:             String  "instanceScale"
+              47:             String  "instanceTexIndex"
+              51:             String  "VSInput"
+              60:             String  "Pos"
+              64:             String  "LightVec"
+              71:             String  "VSOutput"
+              76:             String  "@main"
+              82:             String  "input"
+              92:             String  "output"
+             125:             String  "s"
+             136:             String  "modelview"
+             141:             String  "lightPos"
+             145:             String  "globSpeed"
+             149:             String  "UBO"
+             152:             String  "ubo"
+             169:             String  "c"
+             184:             String  "mx"
+             219:             String  "my"
+             253:             String  "mz"
+             273:             String  "rotMat"
+             302:             String  "gRotMat"
+             329:             String  "locPos"
+             343:             String  "pos"
+             408:             String  "lPos"
+                              Name 6  "main"
+                              Name 27  "VSInput"
+                              MemberName 27(VSInput) 0  "Pos"
+                              MemberName 27(VSInput) 1  "Normal"
+                              MemberName 27(VSInput) 2  "UV"
+                              MemberName 27(VSInput) 3  "Color"
+                              MemberName 27(VSInput) 4  "instancePos"
+                              MemberName 27(VSInput) 5  "instanceRot"
+                              MemberName 27(VSInput) 6  "instanceScale"
+                              MemberName 27(VSInput) 7  "instanceTexIndex"
+                              Name 58  "VSOutput"
+                              MemberName 58(VSOutput) 0  "Pos"
+                              MemberName 58(VSOutput) 1  "Normal"
+                              MemberName 58(VSOutput) 2  "Color"
+                              MemberName 58(VSOutput) 3  "UV"
+                              MemberName 58(VSOutput) 4  "ViewVec"
+                              MemberName 58(VSOutput) 5  "LightVec"
+                              Name 75  "@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;"
+                              Name 74  "input"
+                              Name 90  "output"
+                              Name 123  "s"
+                              Name 134  "UBO"
+                              MemberName 134(UBO) 0  "projection"
+                              MemberName 134(UBO) 1  "modelview"
+                              MemberName 134(UBO) 2  "lightPos"
+                              MemberName 134(UBO) 3  "locSpeed"
+                              MemberName 134(UBO) 4  "globSpeed"
+                              Name 150  "ubo"
+                              MemberName 150(ubo) 0  "ubo"
+                              Name 156  ""
+                              Name 167  "c"
+                              Name 182  "mx"
+                              Name 217  "my"
+                              Name 251  "mz"
+                              Name 271  "rotMat"
+                              Name 300  "gRotMat"
+                              Name 327  "locPos"
+                              Name 341  "pos"
+                              Name 406  "lPos"
+                              Name 442  "input"
+                              Name 444  "input.Pos"
+                              Name 447  "input.Normal"
+                              Name 451  "input.UV"
+                              Name 454  "input.Color"
+                              Name 457  "input.instancePos"
+                              Name 460  "input.instanceRot"
+                              Name 464  "input.instanceScale"
+                              Name 468  "input.instanceTexIndex"
+                              Name 471  "flattenTemp"
+                              Name 472  "param"
+                              Name 476  "@entryPointOutput.Pos"
+                              Name 480  "@entryPointOutput.Normal"
+                              Name 483  "@entryPointOutput.Color"
+                              Name 486  "@entryPointOutput.UV"
+                              Name 489  "@entryPointOutput.ViewVec"
+                              Name 492  "@entryPointOutput.LightVec"
+                              MemberDecorate 134(UBO) 0 RowMajor
+                              MemberDecorate 134(UBO) 0 Offset 0
+                              MemberDecorate 134(UBO) 0 MatrixStride 16
+                              MemberDecorate 134(UBO) 1 RowMajor
+                              MemberDecorate 134(UBO) 1 Offset 64
+                              MemberDecorate 134(UBO) 1 MatrixStride 16
+                              MemberDecorate 134(UBO) 2 Offset 128
+                              MemberDecorate 134(UBO) 3 Offset 144
+                              MemberDecorate 134(UBO) 4 Offset 148
+                              MemberDecorate 150(ubo) 0 Offset 0
+                              Decorate 150(ubo) Block
+                              Decorate 156 DescriptorSet 0
+                              Decorate 156 Binding 0
+                              Decorate 444(input.Pos) Location 0
+                              Decorate 447(input.Normal) Location 1
+                              Decorate 451(input.UV) Location 2
+                              Decorate 454(input.Color) Location 3
+                              Decorate 457(input.instancePos) Location 4
+                              Decorate 460(input.instanceRot) Location 5
+                              Decorate 464(input.instanceScale) Location 6
+                              Decorate 468(input.instanceTexIndex) Location 7
+                              Decorate 476(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 480(@entryPointOutput.Normal) Location 0
+                              Decorate 483(@entryPointOutput.Color) Location 1
+                              Decorate 486(@entryPointOutput.UV) Location 2
+                              Decorate 489(@entryPointOutput.ViewVec) Location 3
+                              Decorate 492(@entryPointOutput.LightVec) Location 4
+               4:             TypeVoid
+               5:             TypeFunction 4
+               8:             TypeFloat 32
+              11:             TypeInt 32 0
+              14:     11(int) Constant 32
+              15:     11(int) Constant 6
+              16:     11(int) Constant 0
+              12:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 13 14 15 16
+              17:     11(int) Constant 3
+               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 10 14 17 16
+              18:             TypeVector 8(float) 3
+              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 17
+              20:             TypeVector 8(float) 2
+              21:     11(int) Constant 2
+              22:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 21
+              23:             TypeInt 32 1
+              26:     11(int) Constant 4
+              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 24 14 26 16
+     27(VSInput):             TypeStruct 18(fvec3) 18(fvec3) 20(fvec2) 18(fvec3) 18(fvec3) 18(fvec3) 8(float) 23(int)
+              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 31
+              32:     11(int) Constant 35
+              33:     11(int) Constant 40
+              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              37:     11(int) Constant 30
+              38:     11(int) Constant 31
+              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 36 22 30 37 38 16 16 17
+              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              44:     11(int) Constant 36
+              45:     11(int) Constant 41
+              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 43 9 30 44 45 16 16 17
+              48:     11(int) Constant 37
+              49:     11(int) Constant 42
+              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 25 30 48 49 16 16 17
+              52:     11(int) Constant 1
+              54:     11(int) Constant 5
+              53:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 52 26 30 54
+              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 51 52 30 16 16 53 51 16 17 28 34 35 39 40 41 42 46
+              55:             TypePointer Function 27(VSInput)
+              56:             TypeVector 8(float) 4
+              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 26
+    58(VSOutput):             TypeStruct 56(fvec4) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3)
+              61:     11(int) Constant 53
+              62:     11(int) Constant 13
+              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 60 57 30 61 62 16 16 17
+              65:     11(int) Constant 58
+              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
+              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
+              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
+              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
+              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
+              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 71 52 30 16 16 53 71 16 17 59 63 66 67 68 69
+              72:             TypeFunction 58(VSOutput) 55(ptr)
+              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 70 50
+              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 76 73 30 16 16 53 76 17 16
+              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 50 30 16 16 77 26 52
+              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              88:     11(int) Constant 63
+              89:             TypePointer Function 58(VSOutput)
+              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 92 70 30 88 16 77 26
+              94:    8(float) Constant 0
+              95:   56(fvec4) ConstantComposite 94 94 94 94
+              96:   18(fvec3) ConstantComposite 94 94 94
+              97:58(VSOutput) ConstantComposite 95 96 96 96 96 96
+              99:     11(int) Constant 64
+             100:     23(int) Constant 2
+             101:     23(int) Constant 3
+             102:             TypePointer Function 18(fvec3)
+             107:     11(int) Constant 65
+             108:             TypePointer Function 20(fvec2)
+             111:     23(int) Constant 7
+             112:             TypePointer Function 23(int)
+             121:     11(int) Constant 68
+             122:             TypePointer Function 8(float)
+             124:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 125 9 30 121 16 77 26
+             127:     23(int) Constant 5
+             130:             TypeMatrix 56(fvec4) 4
+             132:             TypeBool
+             133:   132(bool) ConstantTrue
+             131:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 57 26 133
+        134(UBO):             TypeStruct 130 130 56(fvec4) 8(float) 8(float)
+             137:     11(int) Constant 43
+             138:     11(int) Constant 20
+             135:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 136 131 30 137 138 16 16 17
+             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 136 131 30 137 138 16 16 17
+             142:     11(int) Constant 44
+             143:     11(int) Constant 17
+             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 141 57 30 142 143 16 16 17
+             146:     11(int) Constant 46
+             144:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 9 30 146 143 16 16 17
+             147:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 9 30 146 143 16 16 17
+             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 149 52 30 121 16 53 149 16 17 135 139 140 144 147
+        150(ubo):             TypeStruct 134(UBO)
+             153:     11(int) Constant 49
+             151:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 152 148 30 153 48 16 16 17
+             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 152 52 30 121 16 53 152 16 17 151
+             155:             TypePointer Uniform 150(ubo)
+             156:    155(ptr) Variable Uniform
+             158:     11(int) Constant 8
+             157:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 154 30 121 16 53 1 156 158
+             159:     23(int) Constant 0
+             160:             TypePointer Uniform 8(float)
+             166:     11(int) Constant 69
+             168:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 169 9 30 166 16 77 26
+             178:     11(int) Constant 71
+             179:             TypeMatrix 18(fvec3) 3
+             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 19 17 133
+             181:             TypePointer Function 179
+             183:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 184 180 30 178 16 77 26
+             190:     11(int) Constant 72
+             193:    8(float) Constant 1065353216
+             200:     11(int) Constant 76
+             208:     11(int) Constant 77
+             216:     11(int) Constant 79
+             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 219 180 30 216 16 77 26
+             225:     11(int) Constant 81
+             234:     11(int) Constant 84
+             242:     11(int) Constant 85
+             250:     11(int) Constant 87
+             252:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 253 180 30 250 16 77 26
+             256:     11(int) Constant 88
+             261:     11(int) Constant 89
+             270:     11(int) Constant 91
+             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 273 180 30 270 16 77 26
+             281:     11(int) Constant 94
+             284:     23(int) Constant 4
+             290:     11(int) Constant 95
+             298:     11(int) Constant 96
+             299:             TypePointer Function 130
+             301:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 302 131 30 298 16 77 26
+             308:             TypePointer Function 56(fvec4)
+             311:     11(int) Constant 97
+             312:     23(int) Constant 1
+             313:   56(fvec4) ConstantComposite 94 193 94 94
+             316:     11(int) Constant 98
+             322:     11(int) Constant 99
+             323:   56(fvec4) ConstantComposite 94 94 94 193
+             326:     11(int) Constant 101
+             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 329 57 30 326 16 77 26
+             340:     11(int) Constant 102
+             342:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 343 57 30 340 16 77 26
+             347:     23(int) Constant 6
+             359:     11(int) Constant 104
+             363:             TypePointer Uniform 130
+             372:     11(int) Constant 105
+             391:     11(int) Constant 107
+             405:     11(int) Constant 108
+             407:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 408 19 30 405 16 77 26
+             410:             TypePointer Uniform 56(fvec4)
+             425:     11(int) Constant 109
+             432:     11(int) Constant 110
+             438:     11(int) Constant 111
+             443:             TypePointer Input 18(fvec3)
+  444(input.Pos):    443(ptr) Variable Input
+447(input.Normal):    443(ptr) Variable Input
+             450:             TypePointer Input 20(fvec2)
+   451(input.UV):    450(ptr) Variable Input
+454(input.Color):    443(ptr) Variable Input
+457(input.instancePos):    443(ptr) Variable Input
+460(input.instanceRot):    443(ptr) Variable Input
+             463:             TypePointer Input 8(float)
+464(input.instanceScale):    463(ptr) Variable Input
+             467:             TypePointer Input 23(int)
+468(input.instanceTexIndex):    467(ptr) Variable Input
+             475:             TypePointer Output 56(fvec4)
+476(@entryPointOutput.Pos):    475(ptr) Variable Output
+             479:             TypePointer Output 18(fvec3)
+480(@entryPointOutput.Normal):    479(ptr) Variable Output
+483(@entryPointOutput.Color):    479(ptr) Variable Output
+486(@entryPointOutput.UV):    479(ptr) Variable Output
+489(@entryPointOutput.ViewVec):    479(ptr) Variable Output
+492(@entryPointOutput.LightVec):    479(ptr) Variable Output
+                              Line 1 62 1
+         6(main):           4 Function None 5
+               7:             Label
+      442(input):     55(ptr) Variable Function
+471(flattenTemp):     89(ptr) Variable Function
+      472(param):     55(ptr) Variable Function
+                              Line 1 62 0
+             445:   18(fvec3) Load 444(input.Pos)
+             446:    102(ptr) AccessChain 442(input) 159
+                              Store 446 445
+             448:   18(fvec3) Load 447(input.Normal)
+             449:    102(ptr) AccessChain 442(input) 312
+                              Store 449 448
+             452:   20(fvec2) Load 451(input.UV)
+             453:    108(ptr) AccessChain 442(input) 100
+                              Store 453 452
+             455:   18(fvec3) Load 454(input.Color)
+             456:    102(ptr) AccessChain 442(input) 101
+                              Store 456 455
+             458:   18(fvec3) Load 457(input.instancePos)
+             459:    102(ptr) AccessChain 442(input) 284
+                              Store 459 458
+             461:   18(fvec3) Load 460(input.instanceRot)
+             462:    102(ptr) AccessChain 442(input) 127
+                              Store 462 461
+             465:    8(float) Load 464(input.instanceScale)
+             466:    122(ptr) AccessChain 442(input) 347
+                              Store 466 465
+             469:     23(int) Load 468(input.instanceTexIndex)
+             470:    112(ptr) AccessChain 442(input) 111
+                              Store 470 469
+             473: 27(VSInput) Load 442(input)
+                              Store 472(param) 473
+             474:58(VSOutput) FunctionCall 75(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;) 472(param)
+                              Store 471(flattenTemp) 474
+             477:    308(ptr) AccessChain 471(flattenTemp) 159
+             478:   56(fvec4) Load 477
+                              Store 476(@entryPointOutput.Pos) 478
+             481:    102(ptr) AccessChain 471(flattenTemp) 312
+             482:   18(fvec3) Load 481
+                              Store 480(@entryPointOutput.Normal) 482
+             484:    102(ptr) AccessChain 471(flattenTemp) 100
+             485:   18(fvec3) Load 484
+                              Store 483(@entryPointOutput.Color) 485
+             487:    102(ptr) AccessChain 471(flattenTemp) 101
+             488:   18(fvec3) Load 487
+                              Store 486(@entryPointOutput.UV) 488
+             490:    102(ptr) AccessChain 471(flattenTemp) 284
+             491:   18(fvec3) Load 490
+                              Store 489(@entryPointOutput.ViewVec) 491
+             493:    102(ptr) AccessChain 471(flattenTemp) 127
+             494:   18(fvec3) Load 493
+                              Store 492(@entryPointOutput.LightVec) 494
                               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
+                              Line 1 62 1
+75(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;):58(VSOutput) Function None 72
+       74(input):     55(ptr) FunctionParameter
+              78:             Label
+      90(output):     89(ptr) Variable Function
+          123(s):    122(ptr) Variable Function
+          167(c):    122(ptr) Variable Function
+         182(mx):    181(ptr) Variable Function
+         217(my):    181(ptr) Variable Function
+         251(mz):    181(ptr) Variable Function
+     271(rotMat):    181(ptr) Variable Function
+    300(gRotMat):    299(ptr) Variable Function
+     327(locPos):    308(ptr) Variable Function
+        341(pos):    308(ptr) Variable Function
+       406(lPos):    102(ptr) Variable Function
+              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 16 16 16 16
+              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 81 74(input) 84
+              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 77 75(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;)
+              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
+              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 88 88 16 16
+              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 91 90(output) 84
+                              Store 90(output) 97
+              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 99 99 16 16
+             103:    102(ptr) AccessChain 74(input) 101
+             104:   18(fvec3) Load 103
+             105:    102(ptr) AccessChain 90(output) 100
+                              Store 105 104
+             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 107 107 16 16
+             109:    108(ptr) AccessChain 74(input) 100
+             110:   20(fvec2) Load 109
+             113:    112(ptr) AccessChain 74(input) 111
+             114:     23(int) Load 113
+             115:    8(float) ConvertSToF 114
+             116:    8(float) CompositeExtract 110 0
+             117:    8(float) CompositeExtract 110 1
+             118:   18(fvec3) CompositeConstruct 116 117 115
+             119:    102(ptr) AccessChain 90(output) 101
+                              Store 119 118
+             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 121 121 16 16
+             126:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 124 123(s) 84
+             128:    122(ptr) AccessChain 74(input) 127 16
+             129:    8(float) Load 128
+             161:    160(ptr) AccessChain 156 159 101
+             162:    8(float) Load 161
+             163:    8(float) FAdd 129 162
+             164:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 163
+                              Store 123(s) 164
+             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 166 166 16 16
+             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 168 167(c) 84
+             171:    122(ptr) AccessChain 74(input) 127 16
+             172:    8(float) Load 171
+             173:    160(ptr) AccessChain 156 159 101
+             174:    8(float) Load 173
+             175:    8(float) FAdd 172 174
+             176:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 175
+                              Store 167(c) 176
+             177:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 178 178 16 16
+             185:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 183 182(mx) 84
+             186:    8(float) Load 167(c)
+             187:    8(float) Load 123(s)
+             188:    8(float) FNegate 187
+             189:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 190 190 16 16
+             191:    8(float) Load 123(s)
+             192:    8(float) Load 167(c)
+             194:   18(fvec3) CompositeConstruct 186 188 94
+             195:   18(fvec3) CompositeConstruct 191 192 94
+             196:   18(fvec3) CompositeConstruct 94 94 193
+             197:         179 CompositeConstruct 194 195 196
+             198:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 178 178 16 16
+                              Store 182(mx) 197
+             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 200 200 16 16
+             201:    122(ptr) AccessChain 74(input) 127 52
+             202:    8(float) Load 201
+             203:    160(ptr) AccessChain 156 159 101
+             204:    8(float) Load 203
+             205:    8(float) FAdd 202 204
+             206:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 205
+                              Store 123(s) 206
+             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 208 208 16 16
+             209:    122(ptr) AccessChain 74(input) 127 52
+             210:    8(float) Load 209
+             211:    160(ptr) AccessChain 156 159 101
+             212:    8(float) Load 211
+             213:    8(float) FAdd 210 212
+             214:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 213
+                              Store 167(c) 214
+             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 216 216 16 16
+             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 218 217(my) 84
+             221:    8(float) Load 167(c)
+             222:    8(float) Load 123(s)
+             223:    8(float) FNegate 222
+             224:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 225 225 16 16
+             226:    8(float) Load 123(s)
+             227:    8(float) Load 167(c)
+             228:   18(fvec3) CompositeConstruct 221 94 223
+             229:   18(fvec3) CompositeConstruct 94 193 94
+             230:   18(fvec3) CompositeConstruct 226 94 227
+             231:         179 CompositeConstruct 228 229 230
+             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 216 216 16 16
+                              Store 217(my) 231
+             233:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 234 234 16 16
+             235:    122(ptr) AccessChain 74(input) 127 21
+             236:    8(float) Load 235
+             237:    160(ptr) AccessChain 156 159 101
+             238:    8(float) Load 237
+             239:    8(float) FAdd 236 238
+             240:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 239
+                              Store 123(s) 240
+             241:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 242 242 16 16
+             243:    122(ptr) AccessChain 74(input) 127 21
+             244:    8(float) Load 243
+             245:    160(ptr) AccessChain 156 159 101
+             246:    8(float) Load 245
+             247:    8(float) FAdd 244 246
+             248:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 247
+                              Store 167(c) 248
+             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 250 250 16 16
+             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 252 251(mz) 84
+             255:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 256 256 16 16
+             257:    8(float) Load 167(c)
+             258:    8(float) Load 123(s)
+             259:    8(float) FNegate 258
+             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 261 261 16 16
+             262:    8(float) Load 123(s)
+             263:    8(float) Load 167(c)
+             264:   18(fvec3) CompositeConstruct 193 94 94
+             265:   18(fvec3) CompositeConstruct 94 257 259
+             266:   18(fvec3) CompositeConstruct 94 262 263
+             267:         179 CompositeConstruct 264 265 266
+             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 250 250 16 16
+                              Store 251(mz) 267
+             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 270 270 16 16
+             274:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 272 271(rotMat) 84
+             275:         179 Load 182(mx)
+             276:         179 Load 217(my)
+             277:         179 MatrixTimesMatrix 275 276
+             278:         179 Load 251(mz)
+             279:         179 MatrixTimesMatrix 277 278
+                              Store 271(rotMat) 279
+             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 281 281 16 16
+             282:    122(ptr) AccessChain 74(input) 127 52
+             283:    8(float) Load 282
+             285:    160(ptr) AccessChain 156 159 284
+             286:    8(float) Load 285
+             287:    8(float) FAdd 283 286
+             288:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 287
+                              Store 123(s) 288
+             289:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 290 290 16 16
+             291:    122(ptr) AccessChain 74(input) 127 52
+             292:    8(float) Load 291
+             293:    160(ptr) AccessChain 156 159 284
+             294:    8(float) Load 293
+             295:    8(float) FAdd 292 294
+             296:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 295
+                              Store 167(c) 296
+             297:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 298 298 16 16
+             303:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 301 300(gRotMat) 84
+             304:    8(float) Load 167(c)
+             305:    8(float) Load 123(s)
+             306:    8(float) FNegate 305
+             307:   56(fvec4) CompositeConstruct 304 94 306 94
+             309:    308(ptr) AccessChain 300(gRotMat) 159
+                              Store 309 307
+             310:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 311 311 16 16
+             314:    308(ptr) AccessChain 300(gRotMat) 312
+                              Store 314 313
+             315:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 316 316 16 16
+             317:    8(float) Load 123(s)
+             318:    8(float) Load 167(c)
+             319:   56(fvec4) CompositeConstruct 317 94 318 94
+             320:    308(ptr) AccessChain 300(gRotMat) 100
+                              Store 320 319
+             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 322 322 16 16
+             324:    308(ptr) AccessChain 300(gRotMat) 101
+                              Store 324 323
+             325:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 326 326 16 16
+             330:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 328 327(locPos) 84
+             331:    102(ptr) AccessChain 74(input) 159
+             332:   18(fvec3) Load 331
+             333:         179 Load 271(rotMat)
+             334:   18(fvec3) VectorTimesMatrix 332 333
+             335:    8(float) CompositeExtract 334 0
+             336:    8(float) CompositeExtract 334 1
+             337:    8(float) CompositeExtract 334 2
+             338:   56(fvec4) CompositeConstruct 335 336 337 193
+                              Store 327(locPos) 338
+             339:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 340 340 16 16
+             344:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 342 341(pos) 84
+             345:   56(fvec4) Load 327(locPos)
+             346:   18(fvec3) VectorShuffle 345 345 0 1 2
+             348:    122(ptr) AccessChain 74(input) 347
+             349:    8(float) Load 348
+             350:   18(fvec3) VectorTimesScalar 346 349
+             351:    102(ptr) AccessChain 74(input) 284
+             352:   18(fvec3) Load 351
+             353:   18(fvec3) FAdd 350 352
+             354:    8(float) CompositeExtract 353 0
+             355:    8(float) CompositeExtract 353 1
+             356:    8(float) CompositeExtract 353 2
+             357:   56(fvec4) CompositeConstruct 354 355 356 193
+                              Store 341(pos) 357
+             358:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 359 359 16 16
+             360:   56(fvec4) Load 341(pos)
+             361:         130 Load 300(gRotMat)
+             362:   56(fvec4) VectorTimesMatrix 360 361
+             364:    363(ptr) AccessChain 156 159 312
+             365:         130 Load 364
+             366:   56(fvec4) VectorTimesMatrix 362 365
+             367:    363(ptr) AccessChain 156 159 159
+             368:         130 Load 367
+             369:   56(fvec4) VectorTimesMatrix 366 368
+             370:    308(ptr) AccessChain 90(output) 159
+                              Store 370 369
+             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 372 372 16 16
+             373:    102(ptr) AccessChain 74(input) 312
+             374:   18(fvec3) Load 373
+             375:         179 Load 271(rotMat)
+             376:   18(fvec3) VectorTimesMatrix 374 375
+             377:         130 Load 300(gRotMat)
+             378:    363(ptr) AccessChain 156 159 312
+             379:         130 Load 378
+             380:         130 MatrixTimesMatrix 377 379
+             381:   56(fvec4) CompositeExtract 380 0
+             382:   18(fvec3) VectorShuffle 381 381 0 1 2
+             383:   56(fvec4) CompositeExtract 380 1
+             384:   18(fvec3) VectorShuffle 383 383 0 1 2
+             385:   56(fvec4) CompositeExtract 380 2
+             386:   18(fvec3) VectorShuffle 385 385 0 1 2
+             387:         179 CompositeConstruct 382 384 386
+             388:   18(fvec3) VectorTimesMatrix 376 387
+             389:    102(ptr) AccessChain 90(output) 312
+                              Store 389 388
+             390:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 391 391 16 16
+             392:    102(ptr) AccessChain 74(input) 159
+             393:   18(fvec3) Load 392
+             394:    102(ptr) AccessChain 74(input) 284
+             395:   18(fvec3) Load 394
+             396:   18(fvec3) FAdd 393 395
+             397:    8(float) CompositeExtract 396 0
+             398:    8(float) CompositeExtract 396 1
+             399:    8(float) CompositeExtract 396 2
+             400:   56(fvec4) CompositeConstruct 397 398 399 193
+             401:    363(ptr) AccessChain 156 159 312
+             402:         130 Load 401
+             403:   56(fvec4) VectorTimesMatrix 400 402
+                              Store 341(pos) 403
+             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 405 405 16 16
+             409:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 407 406(lPos) 84
+             411:    410(ptr) AccessChain 156 159 100
+             412:   56(fvec4) Load 411
+             413:   18(fvec3) VectorShuffle 412 412 0 1 2
+             414:    363(ptr) AccessChain 156 159 312
+             415:         130 Load 414
+             416:   56(fvec4) CompositeExtract 415 0
+             417:   18(fvec3) VectorShuffle 416 416 0 1 2
+             418:   56(fvec4) CompositeExtract 415 1
+             419:   18(fvec3) VectorShuffle 418 418 0 1 2
+             420:   56(fvec4) CompositeExtract 415 2
+             421:   18(fvec3) VectorShuffle 420 420 0 1 2
+             422:         179 CompositeConstruct 417 419 421
+             423:   18(fvec3) VectorTimesMatrix 413 422
+                              Store 406(lPos) 423
+             424:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 425 425 16 16
+             426:   18(fvec3) Load 406(lPos)
+             427:   56(fvec4) Load 341(pos)
+             428:   18(fvec3) VectorShuffle 427 427 0 1 2
+             429:   18(fvec3) FSub 426 428
+             430:    102(ptr) AccessChain 90(output) 127
+                              Store 430 429
+             431:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 432 432 16 16
+             433:   56(fvec4) Load 341(pos)
+             434:   18(fvec3) VectorShuffle 433 433 0 1 2
+             435:   18(fvec3) FNegate 434
+             436:    102(ptr) AccessChain 90(output) 284
+                              Store 436 435
+             437:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 438 438 16 16
+             439:58(VSOutput) Load 90(output)
+                              ReturnValue 439
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
index 1d1d14a..02803ad 100644
--- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -1,19 +1,22 @@
 spv.ext.AnyHitShader.rahit
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 108
+// Id's are bound by 116
 
                               Capability GroupNonUniform
                               Capability RayTracingKHR
+                              Capability RayTracingPositionFetchKHR
                               Capability RayCullMaskKHR
                               Extension  "SPV_KHR_ray_cull_mask"
                               Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_KHR_ray_tracing_position_fetch"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 85 99
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 88 93 107
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_EXT_ray_tracing_position_fetch"
                               SourceExtension  "GL_KHR_shader_subgroup_basic"
                               Name 4  "main"
                               Name 9  "v0"
@@ -52,8 +55,10 @@
                               Name 78  "v17"
                               Name 81  "v18"
                               Name 82  "gl_CullMaskEXT"
-                              Name 85  "incomingPayload"
-                              Name 99  "gl_SubgroupSize"
+                              Name 84  "v19"
+                              Name 88  "gl_HitTriangleVertexPositionsEXT"
+                              Name 93  "incomingPayload"
+                              Name 107  "gl_SubgroupSize"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -71,10 +76,11 @@
                               Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
                               Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
                               Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR
-                              Decorate 99(gl_SubgroupSize) RelaxedPrecision
-                              Decorate 99(gl_SubgroupSize) BuiltIn SubgroupSize
-                              Decorate 100 RelaxedPrecision
-                              Decorate 101 RelaxedPrecision
+                              Decorate 88(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR
+                              Decorate 107(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 107(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 108 RelaxedPrecision
+                              Decorate 109 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -115,15 +121,20 @@
               73:             TypeMatrix 72(fvec4) 3
               74:             TypePointer Function 73
 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)
+              85:      6(int) Constant 3
+              86:             TypeArray 29(fvec3) 85
+              87:             TypePointer Input 86
+88(gl_HitTriangleVertexPositionsEXT):     87(ptr) Variable Input
+              89:     16(int) Constant 0
+              92:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+93(incomingPayload):     92(ptr) Variable IncomingRayPayloadKHR
+              94:   28(float) Constant 1056964608
+              95:   72(fvec4) ConstantComposite 94 94 94 94
+              97:     16(int) Constant 1
+              98:             TypeBool
+             103:      6(int) Constant 0
+107(gl_SubgroupSize):     57(ptr) Variable Input
+             110:             TypePointer IncomingRayPayloadKHR 28(float)
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -145,6 +156,7 @@
          75(v16):     74(ptr) Variable Function
          78(v17):     74(ptr) Variable Function
          81(v18):     55(ptr) Variable Function
+         84(v19):     30(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -185,20 +197,23 @@
                               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
+              90:     32(ptr) AccessChain 88(gl_HitTriangleVertexPositionsEXT) 89
+              91:   29(fvec3) Load 90
+                              Store 84(v19) 91
+                              Store 93(incomingPayload) 95
+              96:     16(int) Load 18(v2)
+              99:    98(bool) IEqual 96 97
+                              SelectionMerge 101 None
+                              BranchConditional 99 100 101
+             100:               Label
                                 IgnoreIntersectionKHR
-              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
+             101:             Label
+             108:      6(int) Load 107(gl_SubgroupSize)
+             109:   28(float) ConvertUToF 108
+             111:    110(ptr) AccessChain 93(incomingPayload) 103
+             112:   28(float) Load 111
+             113:   28(float) FAdd 112 109
+             114:    110(ptr) AccessChain 93(incomingPayload) 103
+                              Store 114 113
                               TerminateRayKHR
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
index 73a2381..5cfc8a2 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -1,18 +1,21 @@
 spv.ext.ClosestHitShader.rchit
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 102
+// Id's are bound by 109
 
                               Capability RayTracingKHR
+                              Capability RayTracingPositionFetchKHR
                               Capability RayCullMaskKHR
                               Extension  "SPV_KHR_ray_cull_mask"
                               Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_KHR_ray_tracing_position_fetch"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 86 99 101
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 88 94 106 108
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_EXT_ray_tracing_position_fetch"
                               Name 4  "main"
                               Name 9  "v0"
                               Name 11  "gl_LaunchIDEXT"
@@ -50,9 +53,11 @@
                               Name 78  "v17"
                               Name 81  "v18"
                               Name 82  "gl_CullMaskEXT"
-                              Name 86  "accEXT"
-                              Name 99  "incomingPayload"
-                              Name 101  "localPayload"
+                              Name 84  "v19"
+                              Name 88  "gl_HitTriangleVertexPositionsEXT"
+                              Name 94  "accEXT"
+                              Name 106  "incomingPayload"
+                              Name 108  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -70,8 +75,9 @@
                               Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
                               Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
                               Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR
-                              Decorate 86(accEXT) DescriptorSet 0
-                              Decorate 86(accEXT) Binding 0
+                              Decorate 88(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR
+                              Decorate 94(accEXT) DescriptorSet 0
+                              Decorate 94(accEXT) Binding 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -112,23 +118,27 @@
               73:             TypeMatrix 72(fvec4) 3
               74:             TypePointer Function 73
 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
+              85:      6(int) Constant 3
+              86:             TypeArray 29(fvec3) 85
+              87:             TypePointer Input 86
+88(gl_HitTriangleVertexPositionsEXT):     87(ptr) Variable Input
+              89:     16(int) Constant 0
+              92:             TypeAccelerationStructureKHR
+              93:             TypePointer UniformConstant 92
+      94(accEXT):     93(ptr) Variable UniformConstant
+              96:      6(int) Constant 0
+              97:      6(int) Constant 1
+              98:      6(int) Constant 2
+              99:   28(float) Constant 1056964608
+             100:   29(fvec3) ConstantComposite 99 99 99
+             101:   28(float) Constant 1065353216
+             102:   29(fvec3) ConstantComposite 101 101 101
+             103:   28(float) Constant 1061158912
+             104:     16(int) Constant 1
+             105:             TypePointer IncomingRayPayloadKHR 72(fvec4)
+106(incomingPayload):    105(ptr) Variable IncomingRayPayloadKHR
+             107:             TypePointer RayPayloadKHR 72(fvec4)
+108(localPayload):    107(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -150,6 +160,7 @@
          75(v16):     74(ptr) Variable Function
          78(v17):     74(ptr) Variable Function
          81(v18):     55(ptr) Variable Function
+         84(v19):     30(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -190,7 +201,10 @@
                               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)
+              90:     32(ptr) AccessChain 88(gl_HitTriangleVertexPositionsEXT) 89
+              91:   29(fvec3) Load 90
+                              Store 84(v19) 91
+              95:          92 Load 94(accEXT)
+                              TraceRayKHR 95 96 97 98 85 96 100 99 102 103 106(incomingPayload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.color.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.color.frag.out
new file mode 100644
index 0000000..942a850
--- /dev/null
+++ b/Test/baseResults/spv.ext.ShaderTileImage.color.frag.out
@@ -0,0 +1,38 @@
+spv.ext.ShaderTileImage.color.frag
+WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
+         "precision mediump int; precision highp float;" 
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 15
+
+                              Capability Shader
+                              Capability TileImageColorReadAccessEXT
+                              Extension  "SPV_EXT_shader_tile_image"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_shader_tile_image"
+                              Name 4  "main"
+                              Name 9  "out_color"
+                              Name 12  "in_color"
+                              Decorate 9(out_color) Location 0
+                              Decorate 12(in_color) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+    9(out_color):      8(ptr) Variable Output
+              10:             TypeImage 6(float) TileImageDataEXT nonsampled format:Unknown
+              11:             TypePointer TileImageEXT 10
+    12(in_color):     11(ptr) Variable TileImageEXT
+         4(main):           2 Function None 3
+               5:             Label
+              13:          10 Load 12(in_color)
+              14:    7(fvec4) ColorAttachmentReadEXT 13
+                              Store 9(out_color) 14
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.depth_stencil.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.depth_stencil.frag.out
new file mode 100644
index 0000000..0dcf014
--- /dev/null
+++ b/Test/baseResults/spv.ext.ShaderTileImage.depth_stencil.frag.out
@@ -0,0 +1,56 @@
+spv.ext.ShaderTileImage.depth_stencil.frag
+WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
+         "precision mediump int; precision highp float;" 
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 26
+
+                              Capability Shader
+                              Capability TileImageDepthReadAccessEXT
+                              Capability TileImageStencilReadAccessEXT
+                              Extension  "SPV_EXT_shader_tile_image"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 16 22
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_shader_tile_image"
+                              Name 4  "main"
+                              Name 8  "depth"
+                              Name 12  "stencil_value"
+                              Name 16  "stencil_out"
+                              Name 22  "depth_out"
+                              Decorate 13 RelaxedPrecision
+                              Decorate 16(stencil_out) Location 0
+                              Decorate 22(depth_out) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+              10:             TypeInt 32 0
+              11:             TypePointer Function 10(int)
+              14:             TypeVector 10(int) 4
+              15:             TypePointer Output 14(ivec4)
+ 16(stencil_out):     15(ptr) Variable Output
+              18:     10(int) Constant 0
+              20:             TypeVector 6(float) 4
+              21:             TypePointer Output 20(fvec4)
+   22(depth_out):     21(ptr) Variable Output
+              24:    6(float) Constant 0
+         4(main):           2 Function None 3
+               5:             Label
+        8(depth):      7(ptr) Variable Function
+12(stencil_value):     11(ptr) Variable Function
+               9:    6(float) DepthAttachmentReadEXT
+                              Store 8(depth) 9
+              13:     10(int) StencilAttachmentReadEXT
+                              Store 12(stencil_value) 13
+              17:     10(int) Load 12(stencil_value)
+              19:   14(ivec4) CompositeConstruct 17 18 18 18
+                              Store 16(stencil_out) 19
+              23:    6(float) Load 8(depth)
+              25:   20(fvec4) CompositeConstruct 23 24 24 24
+                              Store 22(depth_out) 25
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.overlap.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.overlap.frag.out
new file mode 100644
index 0000000..e7af421
--- /dev/null
+++ b/Test/baseResults/spv.ext.ShaderTileImage.overlap.frag.out
@@ -0,0 +1,6 @@
+spv.ext.ShaderTileImage.overlap.frag
+ERROR: 0:8: 'location' : overlapping use of location 1
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.subpassinput.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.subpassinput.frag.out
new file mode 100644
index 0000000..0f08f49
--- /dev/null
+++ b/Test/baseResults/spv.ext.ShaderTileImage.subpassinput.frag.out
@@ -0,0 +1,6 @@
+spv.ext.ShaderTileImage.subpassinput.frag
+ERROR: 0:6: 'subpassInput' : can not be used with GL_EXT_shader_tile_image enabled 
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out
new file mode 100644
index 0000000..e91ffb7
--- /dev/null
+++ b/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out
@@ -0,0 +1,6 @@
+spv.ext.ShaderTileImage.typemismatch.frag
+ERROR: 0:7: 'location' : fragment outputs or tileImageEXTs sharing the same location 0 must be the same basic type
+ERROR: 1 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.wronglayout.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.wronglayout.frag.out
new file mode 100644
index 0000000..aa3a198
--- /dev/null
+++ b/Test/baseResults/spv.ext.ShaderTileImage.wronglayout.frag.out
@@ -0,0 +1,9 @@
+spv.ext.ShaderTileImage.wronglayout.frag
+ERROR: 0:7: 'binding' : requires uniform or buffer storage qualifier 
+ERROR: 0:7: 'set' : cannot be used with tileImageEXT 
+ERROR: 0:7: 'tileImageEXT' : can only be used with an explicit location 
+ERROR: 0:7: 'input_attachment_index' : can only be used with a subpass 
+ERROR: 4 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
index c1f6f7c..4db6112 100644
--- a/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
@@ -1,7 +1,7 @@
 spv.ext.meshShaderBuiltins.mesh
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 159
+// Id's are bound by 158
 
                               Capability ClipDistance
                               Capability CullDistance
@@ -13,7 +13,7 @@
                               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
+                              EntryPoint MeshEXT 4  "main" 13 19 24 41 93 134 152 155
                               ExecutionMode 4 LocalSize 32 1 1
                               ExecutionMode 4 OutputVertices 81
                               ExecutionMode 4 OutputPrimitivesNV 32
@@ -45,11 +45,11 @@
                               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"
+                              Name 134  "gl_PrimitiveTriangleIndicesEXT"
+                              Name 150  "id"
+                              Name 152  "gl_DrawIDARB"
+                              Name 154  "viewIdx"
+                              Name 155  "gl_ViewIndex"
                               Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
                               Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups
@@ -69,10 +69,10 @@
                               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
+                              Decorate 134(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
+                              Decorate 152(gl_DrawIDARB) BuiltIn DrawIndex
+                              Decorate 155(gl_ViewIndex) BuiltIn ViewIndex
+                              Decorate 157 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeInt 32 0
@@ -123,19 +123,18 @@
              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
+             132:             TypeArray 11(ivec3) 29
+             133:             TypePointer Output 132
+134(gl_PrimitiveTriangleIndicesEXT):    133(ptr) Variable Output
+             135:      8(int) Constant 257
+             136:   11(ivec3) ConstantComposite 135 135 135
+             137:             TypePointer Output 11(ivec3)
+             141:   11(ivec3) ConstantComposite 64 64 64
+             149:             TypePointer Function 43(int)
+             151:             TypePointer Input 43(int)
+152(gl_DrawIDARB):    151(ptr) Variable Input
+155(gl_ViewIndex):    151(ptr) Variable Input
+             157:   11(ivec3) ConstantComposite 29 62 62
          4(main):           2 Function None 3
                5:             Label
          10(iid):      9(ptr) Variable Function
@@ -244,30 +243,30 @@
                               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
+             138:    137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 44
+                              Store 138 136
+             139:      8(int) Load 28(primitiveCount)
+             140:      8(int) ISub 139 62
+             142:    137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 140
+                              Store 142 141
+             143:      8(int) Load 18(gid)
              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
+             145:      8(int) ISub 144 62
+             146:    137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 145
+             147:   11(ivec3) Load 146
+             148:    137(ptr) AccessChain 134(gl_PrimitiveTriangleIndicesEXT) 143
+                              Store 148 147
                               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
+         150(id):    149(ptr) Variable Function
+    154(viewIdx):    149(ptr) Variable Function
+             153:     43(int) Load 152(gl_DrawIDARB)
+                              Store 150(id) 153
+             156:     43(int) Load 155(gl_ViewIndex)
+                              Store 154(viewIdx) 156
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out b/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out
new file mode 100644
index 0000000..c454dc6
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out
@@ -0,0 +1,46 @@
+spv.intrinsicsSpirvDecorateId.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 16
+
+                              Capability Shader
+                              Extension  "SPV_GOOGLE_hlsl_functionality1"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              Name 4  "main"
+                              Name 10  "CounterBuffer"
+                              MemberName 10(CounterBuffer) 0  "counter"
+                              Name 12  "x"
+                              Name 13  "Uniform"
+                              MemberName 13(Uniform) 0  "y"
+                              Name 15  ""
+                              Decorate 9 BuiltIn WorkgroupSize
+                              MemberDecorate 10(CounterBuffer) 0 Offset 0
+                              Decorate 10(CounterBuffer) Block
+                              Decorate 12(x) DescriptorSet 0
+                              Decorate 12(x) Binding 1
+                              MemberDecorate 13(Uniform) 0 Offset 0
+                              Decorate 13(Uniform) Block
+                              Decorate 15 DescriptorSet 0
+                              Decorate 15 Binding 0
+                              DecorateId 15 DecorationHlslCounterBufferGOOGLE 12(x)
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:      6(int) Constant 1
+               9:    7(ivec3) ConstantComposite 8 8 8
+10(CounterBuffer):             TypeStruct 6(int)
+              11:             TypePointer Uniform 10(CounterBuffer)
+           12(x):     11(ptr) Variable Uniform
+     13(Uniform):             TypeStruct 6(int)
+              14:             TypePointer Uniform 13(Uniform)
+              15:     14(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorateString.comp.out b/Test/baseResults/spv.intrinsicsSpirvDecorateString.comp.out
new file mode 100644
index 0000000..87225b8
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsSpirvDecorateString.comp.out
@@ -0,0 +1,39 @@
+spv.intrinsicsSpirvDecorateString.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 16
+
+                              Capability Shader
+                              Extension  "SPV_GOOGLE_hlsl_functionality1"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              Name 4  "main"
+                              Name 8  "x"
+                              Name 10  "y"
+                              Decorate 8(x) RelaxedPrecision
+                              DecorateStringGOOGLE 8(x) DecorationHlslSemanticGOOGLE  "foobar"
+                              Decorate 10(y) RelaxedPrecision
+                              DecorateStringGOOGLE 10(y) DecorationHlslSemanticGOOGLE  "foobar"
+                              Decorate 15 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               9:    6(float) Constant 1056964608
+              11:    6(float) Constant 1065353216
+              12:             TypeInt 32 0
+              13:             TypeVector 12(int) 3
+              14:     12(int) Constant 1
+              15:   13(ivec3) ConstantComposite 14 14 14
+         4(main):           2 Function None 3
+               5:             Label
+            8(x):      7(ptr) Variable Function
+           10(y):      7(ptr) Variable Function
+                              Store 8(x) 9
+                              Store 10(y) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert.out b/Test/baseResults/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert.out
new file mode 100644
index 0000000..580c704
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert.out
@@ -0,0 +1,35 @@
+spv.intrinsicsSpirvTypeWithTypeSpecifier.vert
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 14
+
+                              Capability Shader
+                              Capability Int64
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Extension  "SPV_EXT_physical_storage_buffer"
+                              Extension  "SPV_KHR_physical_storage_buffer"
+                              Extension  "SPV_KHR_variable_pointers"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT GLSL450
+                              EntryPoint Vertex 4  "main"
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_gpu_shader_int64"
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              Name 4  "main"
+                              Name 8  "value"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeInt 64 0
+              10:  9(int64_t) Constant 1 0
+              11:             TypePointer PhysicalStorageBufferEXT 6(int)
+         4(main):           2 Function None 3
+               5:             Label
+        8(value):      7(ptr) Variable Function
+              12:     11(ptr) ConvertUToPtr 10
+              13:      6(int) Load 12 Aligned 32
+                              Store 8(value) 13
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nv.hitobject-allops.rchit.out b/Test/baseResults/spv.nv.hitobject-allops.rchit.out
new file mode 100644
index 0000000..15e6d41
--- /dev/null
+++ b/Test/baseResults/spv.nv.hitobject-allops.rchit.out
@@ -0,0 +1,215 @@
+spv.nv.hitobject-allops.rchit
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 116
+
+                              Capability RayTracingKHR
+                              Capability ShaderInvocationReorderNV
+                              Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_NV_shader_invocation_reorder"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint ClosestHitKHR 4  "main" 9 14 22 25 36 42 48 52 53 64
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_NV_ray_tracing_motion_blur"
+                              SourceExtension  "GL_NV_shader_invocation_reorder"
+                              Name 4  "main"
+                              Name 9  "attr"
+                              Name 12  "hBlock"
+                              MemberName 12(hBlock) 0  "attrval"
+                              Name 14  ""
+                              Name 22  "hObj"
+                              Name 25  "as"
+                              Name 36  "payload"
+                              Name 40  "pBlock"
+                              MemberName 40(pBlock) 0  "val1"
+                              MemberName 40(pBlock) 1  "val2"
+                              Name 42  ""
+                              Name 48  "hObjHit"
+                              Name 52  "hObjNop"
+                              Name 53  "hObjMiss"
+                              Name 62  "block"
+                              MemberName 62(block) 0  "op"
+                              Name 64  ""
+                              Name 79  "tmin"
+                              Name 81  "tmax"
+                              Name 84  "orig"
+                              Name 86  "dir"
+                              Name 88  "oorig"
+                              Name 90  "odir"
+                              Name 94  "otw"
+                              Name 96  "wto"
+                              Name 99  "cid"
+                              Name 101  "iid"
+                              Name 103  "pid"
+                              Name 105  "gid"
+                              Name 108  "hkind"
+                              Name 112  "handle"
+                              Name 114  "rid"
+                              Decorate 12(hBlock) Block
+                              Decorate 25(as) DescriptorSet 0
+                              Decorate 25(as) Binding 0
+                              Decorate 40(pBlock) Block
+                              MemberDecorate 62(block) 0 Offset 0
+                              Decorate 62(block) Block
+                              Decorate 64 DescriptorSet 0
+                              Decorate 64 Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer HitObjectAttributeNV 7(fvec2)
+         9(attr):      8(ptr) Variable HitObjectAttributeNV
+              10:    6(float) Constant 1065353216
+              11:    7(fvec2) ConstantComposite 10 10
+      12(hBlock):             TypeStruct 6(float)
+              13:             TypePointer HitObjectAttributeNV 12(hBlock)
+              14:     13(ptr) Variable HitObjectAttributeNV
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:    6(float) Constant 1073741824
+              18:             TypePointer HitObjectAttributeNV 6(float)
+              20:             TypeHitObjectNV
+              21:             TypePointer Private 20
+        22(hObj):     21(ptr) Variable Private
+              23:             TypeAccelerationStructureKHR
+              24:             TypePointer UniformConstant 23
+          25(as):     24(ptr) Variable UniformConstant
+              27:             TypeInt 32 0
+              28:     27(int) Constant 1
+              29:             TypeVector 6(float) 3
+              30:    6(float) Constant 1056964608
+              31:   29(fvec3) ConstantComposite 30 30 30
+              32:   29(fvec3) ConstantComposite 10 10 10
+              33:     15(int) Constant 1
+              34:             TypeVector 6(float) 4
+              35:             TypePointer RayPayloadKHR 34(fvec4)
+     36(payload):     35(ptr) Variable RayPayloadKHR
+              38:    6(float) Constant 1092616192
+              39:     15(int) Constant 2
+      40(pBlock):             TypeStruct 7(fvec2) 7(fvec2)
+              41:             TypePointer RayPayloadKHR 40(pBlock)
+              42:     41(ptr) Variable RayPayloadKHR
+              44:     27(int) Constant 2
+              45:   29(fvec3) ConstantComposite 17 17 17
+              47:    6(float) Constant 1082130432
+     48(hObjHit):     21(ptr) Variable Private
+              50:     15(int) Constant 3
+     52(hObjNop):     21(ptr) Variable Private
+    53(hObjMiss):     21(ptr) Variable Private
+              54:    6(float) Constant 1069547520
+              55:   29(fvec3) ConstantComposite 54 54 54
+              56:    6(float) Constant 1084227584
+              57:    6(float) Constant 1090519040
+              58:             TypeBool
+       62(block):             TypeStruct 6(float)
+              63:             TypePointer StorageBuffer 62(block)
+              64:     63(ptr) Variable StorageBuffer
+              65:             TypePointer StorageBuffer 6(float)
+              76:    6(float) Constant 1077936128
+              78:             TypePointer Function 6(float)
+              83:             TypePointer Function 29(fvec3)
+              92:             TypeMatrix 29(fvec3) 4
+              93:             TypePointer Function 92
+              98:             TypePointer Function 15(int)
+             107:             TypePointer Function 27(int)
+             110:             TypeVector 27(int) 2
+             111:             TypePointer Function 110(ivec2)
+         4(main):           2 Function None 3
+               5:             Label
+        79(tmin):     78(ptr) Variable Function
+        81(tmax):     78(ptr) Variable Function
+        84(orig):     83(ptr) Variable Function
+         86(dir):     83(ptr) Variable Function
+       88(oorig):     83(ptr) Variable Function
+        90(odir):     83(ptr) Variable Function
+         94(otw):     93(ptr) Variable Function
+         96(wto):     93(ptr) Variable Function
+         99(cid):     98(ptr) Variable Function
+        101(iid):     98(ptr) Variable Function
+        103(pid):     98(ptr) Variable Function
+        105(gid):     98(ptr) Variable Function
+      108(hkind):    107(ptr) Variable Function
+     112(handle):    111(ptr) Variable Function
+        114(rid):    107(ptr) Variable Function
+                              Store 9(attr) 11
+              19:     18(ptr) AccessChain 14 16
+                              Store 19 17
+              26:          23 Load 25(as)
+                              HitObjectTraceRayNV 22(hObj) 26 28 28 28 28 28 31 30 32 10 36(payload)
+              37:          23 Load 25(as)
+                              HitObjectTraceRayMotionNV 22(hObj) 37 28 28 28 28 28 31 30 32 10 38 42
+              43:          23 Load 25(as)
+                              HitObjectRecordHitNV 22(hObj) 43 33 33 33 44 44 44 32 10 45 17 9(attr)
+              46:          23 Load 25(as)
+                              HitObjectRecordHitMotionNV 22(hObj) 46 33 33 33 44 44 44 32 10 45 17 47 9(attr)
+              49:          23 Load 25(as)
+                              HitObjectRecordHitWithIndexNV 48(hObjHit) 49 33 33 33 44 44 32 10 45 17 14
+              51:          23 Load 25(as)
+                              HitObjectRecordHitWithIndexMotionNV 48(hObjHit) 51 33 33 33 44 44 32 10 45 17 47 14
+                              HitObjectRecordEmptyNV 52(hObjNop)
+                              HitObjectRecordMissNV 53(hObjMiss) 28 31 17 55 56
+                              HitObjectRecordMissMotionNV 53(hObjMiss) 28 31 17 55 56 57
+                              HitObjectExecuteShaderNV 48(hObjHit) 42
+              59:    58(bool) HitObjectIsHitNV 22(hObj)
+                              SelectionMerge 61 None
+                              BranchConditional 59 60 67
+              60:               Label
+              66:     65(ptr)   AccessChain 64 16
+                                Store 66 10
+                                Branch 61
+              67:               Label
+              68:    58(bool)   HitObjectIsMissNV 22(hObj)
+                                SelectionMerge 70 None
+                                BranchConditional 68 69 72
+              69:                 Label
+              71:     65(ptr)     AccessChain 64 16
+                                  Store 71 17
+                                  Branch 70
+              72:                 Label
+              73:    58(bool)     HitObjectIsEmptyNV 22(hObj)
+                                  SelectionMerge 75 None
+                                  BranchConditional 73 74 75
+              74:                   Label
+              77:     65(ptr)       AccessChain 64 16
+                                    Store 77 76
+                                    Branch 75
+              75:                 Label
+                                  Branch 70
+              70:               Label
+                                Branch 61
+              61:             Label
+              80:    6(float) HitObjectGetRayTMinNV 48(hObjHit)
+                              Store 79(tmin) 80
+              82:    6(float) HitObjectGetRayTMaxNV 48(hObjHit)
+                              Store 81(tmax) 82
+              85:   29(fvec3) HitObjectGetWorldRayOriginNV 48(hObjHit)
+                              Store 84(orig) 85
+              87:   29(fvec3) HitObjectGetWorldRayDirectionNV 48(hObjHit)
+                              Store 86(dir) 87
+              89:   29(fvec3) HitObjectGetObjectRayOriginNV 48(hObjHit)
+                              Store 88(oorig) 89
+              91:   29(fvec3) HitObjectGetObjectRayDirectionNV 48(hObjHit)
+                              Store 90(odir) 91
+              95:          92 HitObjectGetObjectToWorldNV 48(hObjHit)
+                              Store 94(otw) 95
+              97:          92 HitObjectGetWorldToObjectNV 48(hObjHit)
+                              Store 96(wto) 97
+             100:     15(int) HitObjectGetInstanceCustomIndexNV 53(hObjMiss)
+                              Store 99(cid) 100
+             102:     15(int) HitObjectGetInstanceIdNV 52(hObjNop)
+                              Store 101(iid) 102
+             104:     15(int) HitObjectGetPrimitiveIndexNV 22(hObj)
+                              Store 103(pid) 104
+             106:     15(int) HitObjectGetGeometryIndexNV 22(hObj)
+                              Store 105(gid) 106
+             109:     27(int) HitObjectGetFrontFaceNV 22(hObj)
+                              Store 108(hkind) 109
+                              HitObjectGetAttributesNV 22(hObj) 9(attr)
+             113:  110(ivec2) HitObjectGetShaderRecordBufferHandleNV 22(hObj)
+                              Store 112(handle) 113
+             115:     27(int) HitObjectGetShaderBindingTableRecordIndexNV 22(hObj)
+                              Store 114(rid) 115
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nv.hitobject-allops.rgen.out b/Test/baseResults/spv.nv.hitobject-allops.rgen.out
new file mode 100644
index 0000000..d395500
--- /dev/null
+++ b/Test/baseResults/spv.nv.hitobject-allops.rgen.out
@@ -0,0 +1,219 @@
+spv.nv.hitobject-allops.rgen
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 117
+
+                              Capability RayTracingKHR
+                              Capability ShaderInvocationReorderNV
+                              Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_NV_shader_invocation_reorder"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 4  "main" 9 14 22 25 36 42 48 52 53 64
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_NV_ray_tracing_motion_blur"
+                              SourceExtension  "GL_NV_shader_invocation_reorder"
+                              Name 4  "main"
+                              Name 9  "attr"
+                              Name 12  "hBlock"
+                              MemberName 12(hBlock) 0  "attrval"
+                              Name 14  ""
+                              Name 22  "hObj"
+                              Name 25  "as"
+                              Name 36  "payload"
+                              Name 40  "pBlock"
+                              MemberName 40(pBlock) 0  "val1"
+                              MemberName 40(pBlock) 1  "val2"
+                              Name 42  ""
+                              Name 48  "hObjHit"
+                              Name 52  "hObjNop"
+                              Name 53  "hObjMiss"
+                              Name 62  "block"
+                              MemberName 62(block) 0  "op"
+                              Name 64  ""
+                              Name 79  "tmin"
+                              Name 81  "tmax"
+                              Name 84  "orig"
+                              Name 86  "dir"
+                              Name 88  "oorig"
+                              Name 90  "odir"
+                              Name 94  "otw"
+                              Name 96  "wto"
+                              Name 99  "cid"
+                              Name 101  "iid"
+                              Name 103  "pid"
+                              Name 105  "gid"
+                              Name 108  "hkind"
+                              Name 112  "handle"
+                              Name 114  "rid"
+                              Decorate 12(hBlock) Block
+                              Decorate 25(as) DescriptorSet 0
+                              Decorate 25(as) Binding 0
+                              Decorate 40(pBlock) Block
+                              MemberDecorate 62(block) 0 Offset 0
+                              Decorate 62(block) Block
+                              Decorate 64 DescriptorSet 0
+                              Decorate 64 Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer HitObjectAttributeNV 7(fvec2)
+         9(attr):      8(ptr) Variable HitObjectAttributeNV
+              10:    6(float) Constant 1065353216
+              11:    7(fvec2) ConstantComposite 10 10
+      12(hBlock):             TypeStruct 6(float)
+              13:             TypePointer HitObjectAttributeNV 12(hBlock)
+              14:     13(ptr) Variable HitObjectAttributeNV
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:    6(float) Constant 1073741824
+              18:             TypePointer HitObjectAttributeNV 6(float)
+              20:             TypeHitObjectNV
+              21:             TypePointer Private 20
+        22(hObj):     21(ptr) Variable Private
+              23:             TypeAccelerationStructureKHR
+              24:             TypePointer UniformConstant 23
+          25(as):     24(ptr) Variable UniformConstant
+              27:             TypeInt 32 0
+              28:     27(int) Constant 1
+              29:             TypeVector 6(float) 3
+              30:    6(float) Constant 1056964608
+              31:   29(fvec3) ConstantComposite 30 30 30
+              32:   29(fvec3) ConstantComposite 10 10 10
+              33:     15(int) Constant 1
+              34:             TypeVector 6(float) 4
+              35:             TypePointer RayPayloadKHR 34(fvec4)
+     36(payload):     35(ptr) Variable RayPayloadKHR
+              38:    6(float) Constant 1092616192
+              39:     15(int) Constant 2
+      40(pBlock):             TypeStruct 7(fvec2) 7(fvec2)
+              41:             TypePointer RayPayloadKHR 40(pBlock)
+              42:     41(ptr) Variable RayPayloadKHR
+              44:     27(int) Constant 2
+              45:   29(fvec3) ConstantComposite 17 17 17
+              47:    6(float) Constant 1082130432
+     48(hObjHit):     21(ptr) Variable Private
+              50:     15(int) Constant 3
+     52(hObjNop):     21(ptr) Variable Private
+    53(hObjMiss):     21(ptr) Variable Private
+              54:    6(float) Constant 1069547520
+              55:   29(fvec3) ConstantComposite 54 54 54
+              56:    6(float) Constant 1084227584
+              57:    6(float) Constant 1090519040
+              58:             TypeBool
+       62(block):             TypeStruct 6(float)
+              63:             TypePointer StorageBuffer 62(block)
+              64:     63(ptr) Variable StorageBuffer
+              65:             TypePointer StorageBuffer 6(float)
+              76:    6(float) Constant 1077936128
+              78:             TypePointer Function 6(float)
+              83:             TypePointer Function 29(fvec3)
+              92:             TypeMatrix 29(fvec3) 4
+              93:             TypePointer Function 92
+              98:             TypePointer Function 15(int)
+             107:             TypePointer Function 27(int)
+             110:             TypeVector 27(int) 2
+             111:             TypePointer Function 110(ivec2)
+             116:     27(int) Constant 4
+         4(main):           2 Function None 3
+               5:             Label
+        79(tmin):     78(ptr) Variable Function
+        81(tmax):     78(ptr) Variable Function
+        84(orig):     83(ptr) Variable Function
+         86(dir):     83(ptr) Variable Function
+       88(oorig):     83(ptr) Variable Function
+        90(odir):     83(ptr) Variable Function
+         94(otw):     93(ptr) Variable Function
+         96(wto):     93(ptr) Variable Function
+         99(cid):     98(ptr) Variable Function
+        101(iid):     98(ptr) Variable Function
+        103(pid):     98(ptr) Variable Function
+        105(gid):     98(ptr) Variable Function
+      108(hkind):    107(ptr) Variable Function
+     112(handle):    111(ptr) Variable Function
+        114(rid):    107(ptr) Variable Function
+                              Store 9(attr) 11
+              19:     18(ptr) AccessChain 14 16
+                              Store 19 17
+              26:          23 Load 25(as)
+                              HitObjectTraceRayNV 22(hObj) 26 28 28 28 28 28 31 30 32 10 36(payload)
+              37:          23 Load 25(as)
+                              HitObjectTraceRayMotionNV 22(hObj) 37 28 28 28 28 28 31 30 32 10 38 42
+              43:          23 Load 25(as)
+                              HitObjectRecordHitNV 22(hObj) 43 33 33 33 44 44 44 32 10 45 17 9(attr)
+              46:          23 Load 25(as)
+                              HitObjectRecordHitMotionNV 22(hObj) 46 33 33 33 44 44 44 32 10 45 17 47 9(attr)
+              49:          23 Load 25(as)
+                              HitObjectRecordHitWithIndexNV 48(hObjHit) 49 33 33 33 44 44 32 10 45 17 14
+              51:          23 Load 25(as)
+                              HitObjectRecordHitWithIndexMotionNV 48(hObjHit) 51 33 33 33 44 44 32 10 45 17 47 14
+                              HitObjectRecordEmptyNV 52(hObjNop)
+                              HitObjectRecordMissNV 53(hObjMiss) 28 31 17 55 56
+                              HitObjectRecordMissMotionNV 53(hObjMiss) 28 31 17 55 56 57
+                              HitObjectExecuteShaderNV 48(hObjHit) 36(payload)
+              59:    58(bool) HitObjectIsHitNV 22(hObj)
+                              SelectionMerge 61 None
+                              BranchConditional 59 60 67
+              60:               Label
+              66:     65(ptr)   AccessChain 64 16
+                                Store 66 10
+                                Branch 61
+              67:               Label
+              68:    58(bool)   HitObjectIsMissNV 22(hObj)
+                                SelectionMerge 70 None
+                                BranchConditional 68 69 72
+              69:                 Label
+              71:     65(ptr)     AccessChain 64 16
+                                  Store 71 17
+                                  Branch 70
+              72:                 Label
+              73:    58(bool)     HitObjectIsEmptyNV 22(hObj)
+                                  SelectionMerge 75 None
+                                  BranchConditional 73 74 75
+              74:                   Label
+              77:     65(ptr)       AccessChain 64 16
+                                    Store 77 76
+                                    Branch 75
+              75:                 Label
+                                  Branch 70
+              70:               Label
+                                Branch 61
+              61:             Label
+              80:    6(float) HitObjectGetRayTMinNV 48(hObjHit)
+                              Store 79(tmin) 80
+              82:    6(float) HitObjectGetRayTMaxNV 48(hObjHit)
+                              Store 81(tmax) 82
+              85:   29(fvec3) HitObjectGetWorldRayOriginNV 48(hObjHit)
+                              Store 84(orig) 85
+              87:   29(fvec3) HitObjectGetWorldRayDirectionNV 48(hObjHit)
+                              Store 86(dir) 87
+              89:   29(fvec3) HitObjectGetObjectRayOriginNV 48(hObjHit)
+                              Store 88(oorig) 89
+              91:   29(fvec3) HitObjectGetObjectRayDirectionNV 48(hObjHit)
+                              Store 90(odir) 91
+              95:          92 HitObjectGetObjectToWorldNV 48(hObjHit)
+                              Store 94(otw) 95
+              97:          92 HitObjectGetWorldToObjectNV 48(hObjHit)
+                              Store 96(wto) 97
+             100:     15(int) HitObjectGetInstanceCustomIndexNV 53(hObjMiss)
+                              Store 99(cid) 100
+             102:     15(int) HitObjectGetInstanceIdNV 52(hObjNop)
+                              Store 101(iid) 102
+             104:     15(int) HitObjectGetPrimitiveIndexNV 22(hObj)
+                              Store 103(pid) 104
+             106:     15(int) HitObjectGetGeometryIndexNV 22(hObj)
+                              Store 105(gid) 106
+             109:     27(int) HitObjectGetFrontFaceNV 22(hObj)
+                              Store 108(hkind) 109
+                              HitObjectGetAttributesNV 22(hObj) 9(attr)
+             113:  110(ivec2) HitObjectGetShaderRecordBufferHandleNV 22(hObj)
+                              Store 112(handle) 113
+             115:     27(int) HitObjectGetShaderBindingTableRecordIndexNV 22(hObj)
+                              Store 114(rid) 115
+                              ReorderThreadWithHintNV 116 116
+                              ReorderThreadWithHitObjectNV 48(hObjHit)
+                              ReorderThreadWithHitObjectNV 48(hObjHit) 116 44
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.nv.hitobject-allops.rmiss.out b/Test/baseResults/spv.nv.hitobject-allops.rmiss.out
new file mode 100644
index 0000000..970d08a
--- /dev/null
+++ b/Test/baseResults/spv.nv.hitobject-allops.rmiss.out
@@ -0,0 +1,215 @@
+spv.nv.hitobject-allops.rmiss
+// Module Version 10400
+// Generated by (magic number): 8000b
+// Id's are bound by 116
+
+                              Capability RayTracingKHR
+                              Capability ShaderInvocationReorderNV
+                              Extension  "SPV_KHR_ray_tracing"
+                              Extension  "SPV_NV_shader_invocation_reorder"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MissKHR 4  "main" 9 14 22 25 36 42 48 52 53 64
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_ray_tracing"
+                              SourceExtension  "GL_NV_ray_tracing_motion_blur"
+                              SourceExtension  "GL_NV_shader_invocation_reorder"
+                              Name 4  "main"
+                              Name 9  "attr"
+                              Name 12  "hBlock"
+                              MemberName 12(hBlock) 0  "attrval"
+                              Name 14  ""
+                              Name 22  "hObj"
+                              Name 25  "as"
+                              Name 36  "payload"
+                              Name 40  "pBlock"
+                              MemberName 40(pBlock) 0  "val1"
+                              MemberName 40(pBlock) 1  "val2"
+                              Name 42  ""
+                              Name 48  "hObjHit"
+                              Name 52  "hObjNop"
+                              Name 53  "hObjMiss"
+                              Name 62  "block"
+                              MemberName 62(block) 0  "op"
+                              Name 64  ""
+                              Name 79  "tmin"
+                              Name 81  "tmax"
+                              Name 84  "orig"
+                              Name 86  "dir"
+                              Name 88  "oorig"
+                              Name 90  "odir"
+                              Name 94  "otw"
+                              Name 96  "wto"
+                              Name 99  "cid"
+                              Name 101  "iid"
+                              Name 103  "pid"
+                              Name 105  "gid"
+                              Name 108  "hkind"
+                              Name 112  "handle"
+                              Name 114  "rid"
+                              Decorate 12(hBlock) Block
+                              Decorate 25(as) DescriptorSet 0
+                              Decorate 25(as) Binding 0
+                              Decorate 40(pBlock) Block
+                              MemberDecorate 62(block) 0 Offset 0
+                              Decorate 62(block) Block
+                              Decorate 64 DescriptorSet 0
+                              Decorate 64 Binding 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer HitObjectAttributeNV 7(fvec2)
+         9(attr):      8(ptr) Variable HitObjectAttributeNV
+              10:    6(float) Constant 1065353216
+              11:    7(fvec2) ConstantComposite 10 10
+      12(hBlock):             TypeStruct 6(float)
+              13:             TypePointer HitObjectAttributeNV 12(hBlock)
+              14:     13(ptr) Variable HitObjectAttributeNV
+              15:             TypeInt 32 1
+              16:     15(int) Constant 0
+              17:    6(float) Constant 1073741824
+              18:             TypePointer HitObjectAttributeNV 6(float)
+              20:             TypeHitObjectNV
+              21:             TypePointer Private 20
+        22(hObj):     21(ptr) Variable Private
+              23:             TypeAccelerationStructureKHR
+              24:             TypePointer UniformConstant 23
+          25(as):     24(ptr) Variable UniformConstant
+              27:             TypeInt 32 0
+              28:     27(int) Constant 1
+              29:             TypeVector 6(float) 3
+              30:    6(float) Constant 1056964608
+              31:   29(fvec3) ConstantComposite 30 30 30
+              32:   29(fvec3) ConstantComposite 10 10 10
+              33:     15(int) Constant 1
+              34:             TypeVector 6(float) 4
+              35:             TypePointer RayPayloadKHR 34(fvec4)
+     36(payload):     35(ptr) Variable RayPayloadKHR
+              38:    6(float) Constant 1092616192
+              39:     15(int) Constant 2
+      40(pBlock):             TypeStruct 7(fvec2) 7(fvec2)
+              41:             TypePointer RayPayloadKHR 40(pBlock)
+              42:     41(ptr) Variable RayPayloadKHR
+              44:     27(int) Constant 2
+              45:   29(fvec3) ConstantComposite 17 17 17
+              47:    6(float) Constant 1082130432
+     48(hObjHit):     21(ptr) Variable Private
+              50:     15(int) Constant 3
+     52(hObjNop):     21(ptr) Variable Private
+    53(hObjMiss):     21(ptr) Variable Private
+              54:    6(float) Constant 1069547520
+              55:   29(fvec3) ConstantComposite 54 54 54
+              56:    6(float) Constant 1084227584
+              57:    6(float) Constant 1090519040
+              58:             TypeBool
+       62(block):             TypeStruct 6(float)
+              63:             TypePointer StorageBuffer 62(block)
+              64:     63(ptr) Variable StorageBuffer
+              65:             TypePointer StorageBuffer 6(float)
+              76:    6(float) Constant 1077936128
+              78:             TypePointer Function 6(float)
+              83:             TypePointer Function 29(fvec3)
+              92:             TypeMatrix 29(fvec3) 4
+              93:             TypePointer Function 92
+              98:             TypePointer Function 15(int)
+             107:             TypePointer Function 27(int)
+             110:             TypeVector 27(int) 2
+             111:             TypePointer Function 110(ivec2)
+         4(main):           2 Function None 3
+               5:             Label
+        79(tmin):     78(ptr) Variable Function
+        81(tmax):     78(ptr) Variable Function
+        84(orig):     83(ptr) Variable Function
+         86(dir):     83(ptr) Variable Function
+       88(oorig):     83(ptr) Variable Function
+        90(odir):     83(ptr) Variable Function
+         94(otw):     93(ptr) Variable Function
+         96(wto):     93(ptr) Variable Function
+         99(cid):     98(ptr) Variable Function
+        101(iid):     98(ptr) Variable Function
+        103(pid):     98(ptr) Variable Function
+        105(gid):     98(ptr) Variable Function
+      108(hkind):    107(ptr) Variable Function
+     112(handle):    111(ptr) Variable Function
+        114(rid):    107(ptr) Variable Function
+                              Store 9(attr) 11
+              19:     18(ptr) AccessChain 14 16
+                              Store 19 17
+              26:          23 Load 25(as)
+                              HitObjectTraceRayNV 22(hObj) 26 28 28 28 28 28 31 30 32 10 36(payload)
+              37:          23 Load 25(as)
+                              HitObjectTraceRayMotionNV 22(hObj) 37 28 28 28 28 28 31 30 32 10 38 42
+              43:          23 Load 25(as)
+                              HitObjectRecordHitNV 22(hObj) 43 33 33 33 44 44 44 32 10 45 17 9(attr)
+              46:          23 Load 25(as)
+                              HitObjectRecordHitMotionNV 22(hObj) 46 33 33 33 44 44 44 32 10 45 17 47 9(attr)
+              49:          23 Load 25(as)
+                              HitObjectRecordHitWithIndexNV 48(hObjHit) 49 33 33 33 44 44 32 10 45 17 14
+              51:          23 Load 25(as)
+                              HitObjectRecordHitWithIndexMotionNV 48(hObjHit) 51 33 33 33 44 44 32 10 45 17 47 14
+                              HitObjectRecordEmptyNV 52(hObjNop)
+                              HitObjectRecordMissNV 53(hObjMiss) 28 31 17 55 56
+                              HitObjectRecordMissMotionNV 53(hObjMiss) 28 31 17 55 56 57
+                              HitObjectExecuteShaderNV 48(hObjHit) 42
+              59:    58(bool) HitObjectIsHitNV 22(hObj)
+                              SelectionMerge 61 None
+                              BranchConditional 59 60 67
+              60:               Label
+              66:     65(ptr)   AccessChain 64 16
+                                Store 66 10
+                                Branch 61
+              67:               Label
+              68:    58(bool)   HitObjectIsMissNV 22(hObj)
+                                SelectionMerge 70 None
+                                BranchConditional 68 69 72
+              69:                 Label
+              71:     65(ptr)     AccessChain 64 16
+                                  Store 71 17
+                                  Branch 70
+              72:                 Label
+              73:    58(bool)     HitObjectIsEmptyNV 22(hObj)
+                                  SelectionMerge 75 None
+                                  BranchConditional 73 74 75
+              74:                   Label
+              77:     65(ptr)       AccessChain 64 16
+                                    Store 77 76
+                                    Branch 75
+              75:                 Label
+                                  Branch 70
+              70:               Label
+                                Branch 61
+              61:             Label
+              80:    6(float) HitObjectGetRayTMinNV 48(hObjHit)
+                              Store 79(tmin) 80
+              82:    6(float) HitObjectGetRayTMaxNV 48(hObjHit)
+                              Store 81(tmax) 82
+              85:   29(fvec3) HitObjectGetWorldRayOriginNV 48(hObjHit)
+                              Store 84(orig) 85
+              87:   29(fvec3) HitObjectGetWorldRayDirectionNV 48(hObjHit)
+                              Store 86(dir) 87
+              89:   29(fvec3) HitObjectGetObjectRayOriginNV 48(hObjHit)
+                              Store 88(oorig) 89
+              91:   29(fvec3) HitObjectGetObjectRayDirectionNV 48(hObjHit)
+                              Store 90(odir) 91
+              95:          92 HitObjectGetObjectToWorldNV 48(hObjHit)
+                              Store 94(otw) 95
+              97:          92 HitObjectGetWorldToObjectNV 48(hObjHit)
+                              Store 96(wto) 97
+             100:     15(int) HitObjectGetInstanceCustomIndexNV 53(hObjMiss)
+                              Store 99(cid) 100
+             102:     15(int) HitObjectGetInstanceIdNV 52(hObjNop)
+                              Store 101(iid) 102
+             104:     15(int) HitObjectGetPrimitiveIndexNV 22(hObj)
+                              Store 103(pid) 104
+             106:     15(int) HitObjectGetGeometryIndexNV 22(hObj)
+                              Store 105(gid) 106
+             109:     27(int) HitObjectGetFrontFaceNV 22(hObj)
+                              Store 108(hkind) 109
+                              HitObjectGetAttributesNV 22(hObj) 9(attr)
+             113:  110(ivec2) HitObjectGetShaderRecordBufferHandleNV 22(hObj)
+                              Store 112(handle) 113
+             115:     27(int) HitObjectGetShaderBindingTableRecordIndexNV 22(hObj)
+                              Store 114(rid) 115
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.structCopy.comp.out b/Test/baseResults/spv.structCopy.comp.out
new file mode 100644
index 0000000..38c7c09
--- /dev/null
+++ b/Test/baseResults/spv.structCopy.comp.out
@@ -0,0 +1,142 @@
+spv.structCopy.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 81
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 24
+                              ExecutionMode 4 LocalSize 512 1 1
+                              Source GLSL 460
+                              Name 4  "main"
+                              Name 7  "MyStruct"
+                              MemberName 7(MyStruct) 0  "a"
+                              MemberName 7(MyStruct) 1  "b"
+                              MemberName 7(MyStruct) 2  "c"
+                              Name 11  "s"
+                              Name 21  "id"
+                              Name 24  "gl_GlobalInvocationID"
+                              Name 30  "ms"
+                              Name 32  "MyStruct"
+                              MemberName 32(MyStruct) 0  "a"
+                              MemberName 32(MyStruct) 1  "b"
+                              MemberName 32(MyStruct) 2  "c"
+                              Name 34  "MyStructs"
+                              MemberName 34(MyStructs) 0  "count"
+                              MemberName 34(MyStructs) 1  "data"
+                              Name 36  "my_structs"
+                              Name 65  "Output"
+                              MemberName 65(Output) 0  "a"
+                              MemberName 65(Output) 1  "b"
+                              MemberName 65(Output) 2  "c"
+                              Name 67  "o"
+                              Decorate 24(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
+                              MemberDecorate 32(MyStruct) 0 Offset 0
+                              MemberDecorate 32(MyStruct) 1 Offset 4
+                              MemberDecorate 32(MyStruct) 2 Offset 8
+                              Decorate 33 ArrayStride 12
+                              MemberDecorate 34(MyStructs) 0 Offset 0
+                              MemberDecorate 34(MyStructs) 1 Offset 4
+                              Decorate 34(MyStructs) BufferBlock
+                              Decorate 36(my_structs) DescriptorSet 0
+                              Decorate 36(my_structs) Binding 0
+                              MemberDecorate 65(Output) 0 Offset 0
+                              MemberDecorate 65(Output) 1 Offset 4
+                              MemberDecorate 65(Output) 2 Offset 8
+                              Decorate 65(Output) BufferBlock
+                              Decorate 67(o) DescriptorSet 0
+                              Decorate 67(o) Binding 1
+                              Decorate 80 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+     7(MyStruct):             TypeStruct 6(int) 6(int) 6(int)
+               8:      6(int) Constant 512
+               9:             TypeArray 7(MyStruct) 8
+              10:             TypePointer Workgroup 9
+           11(s):     10(ptr) Variable Workgroup
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:      6(int) Constant 1
+              15:      6(int) Constant 2
+              16:      6(int) Constant 3
+              17: 7(MyStruct) ConstantComposite 14 15 16
+              18:             TypePointer Workgroup 7(MyStruct)
+              20:             TypePointer Function 6(int)
+              22:             TypeVector 6(int) 3
+              23:             TypePointer Input 22(ivec3)
+24(gl_GlobalInvocationID):     23(ptr) Variable Input
+              25:      6(int) Constant 0
+              26:             TypePointer Input 6(int)
+              29:             TypePointer Function 7(MyStruct)
+    32(MyStruct):             TypeStruct 6(int) 6(int) 6(int)
+              33:             TypeRuntimeArray 32(MyStruct)
+   34(MyStructs):             TypeStruct 6(int) 33
+              35:             TypePointer Uniform 34(MyStructs)
+  36(my_structs):     35(ptr) Variable Uniform
+              37:             TypePointer Uniform 6(int)
+              40:             TypeBool
+              52:     12(int) Constant 1
+              54:             TypePointer Uniform 32(MyStruct)
+              62:     12(int) Constant 2
+      65(Output):             TypeStruct 6(int) 6(int) 6(int)
+              66:             TypePointer Uniform 65(Output)
+           67(o):     66(ptr) Variable Uniform
+              80:   22(ivec3) ConstantComposite 8 14 14
+         4(main):           2 Function None 3
+               5:             Label
+          21(id):     20(ptr) Variable Function
+          30(ms):     29(ptr) Variable Function
+              42:     29(ptr) Variable Function
+              19:     18(ptr) AccessChain 11(s) 13
+                              Store 19 17
+              27:     26(ptr) AccessChain 24(gl_GlobalInvocationID) 25
+              28:      6(int) Load 27
+                              Store 21(id) 28
+              31:      6(int) Load 21(id)
+              38:     37(ptr) AccessChain 36(my_structs) 13
+              39:      6(int) Load 38
+              41:    40(bool) UGreaterThan 31 39
+                              SelectionMerge 44 None
+                              BranchConditional 41 43 51
+              43:               Label
+              45:      6(int)   Load 21(id)
+              46:     37(ptr)   AccessChain 36(my_structs) 13
+              47:      6(int)   Load 46
+              48:      6(int)   ISub 45 47
+              49:     18(ptr)   AccessChain 11(s) 48
+              50: 7(MyStruct)   Load 49
+                                Store 42 50
+                                Branch 44
+              51:               Label
+              53:      6(int)   Load 21(id)
+              55:     54(ptr)   AccessChain 36(my_structs) 52 53
+              56:32(MyStruct)   Load 55
+              57:      6(int)   CompositeExtract 56 0
+              58:     20(ptr)   AccessChain 42 13
+                                Store 58 57
+              59:      6(int)   CompositeExtract 56 1
+              60:     20(ptr)   AccessChain 42 52
+                                Store 60 59
+              61:      6(int)   CompositeExtract 56 2
+              63:     20(ptr)   AccessChain 42 62
+                                Store 63 61
+                                Branch 44
+              44:             Label
+              64: 7(MyStruct) Load 42
+                              Store 30(ms) 64
+              68:     37(ptr) AccessChain 67(o) 13
+              69:     20(ptr) AccessChain 30(ms) 13
+              70:      6(int) Load 69
+              71:      6(int) AtomicIAdd 68 14 25 70
+              72:     37(ptr) AccessChain 67(o) 52
+              73:     20(ptr) AccessChain 30(ms) 52
+              74:      6(int) Load 73
+              75:      6(int) AtomicIAdd 72 14 25 74
+              76:     37(ptr) AccessChain 67(o) 62
+              77:     20(ptr) AccessChain 30(ms) 62
+              78:      6(int) Load 77
+              79:      6(int) AtomicIAdd 76 14 25 78
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/struct.error.frag.out b/Test/baseResults/struct.error.frag.out
new file mode 100644
index 0000000..5b0993a
--- /dev/null
+++ b/Test/baseResults/struct.error.frag.out
@@ -0,0 +1,37 @@
+struct.error.frag
+ERROR: 0:12: 'z' : no such field in structure 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 460
+ERROR: node is still EOpNull!
+0:7  Function Definition: test( ( global structure{ global float x})
+0:7    Function Parameters: 
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        Constant:
+0:8          1.000000
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:12    Sequence
+0:12      Function Call: test( ( global structure{ global float x})
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 460
+ERROR: node is still EOpNull!
+0:7  Function Definition: test( ( global structure{ global float x})
+0:7    Function Parameters: 
+0:8    Sequence
+0:8      Branch: Return with expression
+0:8        Constant:
+0:8          1.000000
+0:11  Function Definition: main( ( global void)
+0:11    Function Parameters: 
+0:12    Sequence
+0:12      Function Call: test( ( global structure{ global float x})
+0:?   Linker Objects
+
diff --git a/Test/baseResults/tokenLength.vert.out b/Test/baseResults/tokenLength.vert.out
index 8c31da9..5f10830 100644
--- a/Test/baseResults/tokenLength.vert.out
+++ b/Test/baseResults/tokenLength.vert.out
@@ -27,7 +27,8 @@
 ERROR: 0:67: '' : numeric literal too long 
 ERROR: 0:70: '' : name too long 
 ERROR: 0:70: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-ERROR: 26 compilation errors.  No code generated.
+ERROR: 0:74: '' :  syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
+ERROR: 27 compilation errors.  No code generated.
 
 
 Shader version: 300
@@ -56,7 +57,7 @@
 0:14    move second child to first child ( temp highp int)
 0:14      'HE' ( global highp int)
 0:14      Constant:
-0:14        -1 (const int)
+0:14        180150000 (const int)
 0:17  Sequence
 0:17    move second child to first child ( temp highp float)
 0:17      'F' ( global highp float)
@@ -119,6 +120,7 @@
 0:?     'superO' ( global highp int)
 0:?     'superI' ( global highp int)
 0:?     'superF' ( global highp float)
+0:?     'BE' ( global highp int)
 0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
 
@@ -152,7 +154,7 @@
 0:14    move second child to first child ( temp highp int)
 0:14      'HE' ( global highp int)
 0:14      Constant:
-0:14        -1 (const int)
+0:14        180150000 (const int)
 0:17  Sequence
 0:17    move second child to first child ( temp highp float)
 0:17      'F' ( global highp float)
@@ -215,6 +217,7 @@
 0:?     'superO' ( global highp int)
 0:?     'superI' ( global highp int)
 0:?     'superF' ( global highp float)
+0:?     'BE' ( global highp int)
 0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
 
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index 78aea82..8e6bfcc 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -6,7 +6,7 @@
 ERROR: 0:8: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:9: 'binding' : sampler/texture/image requires layout(binding=X) 
 ERROR: 0:10: 'binding' : sampler/texture/image requires layout(binding=X) 
-ERROR: 0:14: 'sampler2D' : sampler-constructor requires two arguments 
+ERROR: 0:14: 'sampler2D' : sampler-constructor requires the extension GL_ARB_bindless_texture enabled 
 ERROR: 0:15: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type 
 ERROR: 0:16: 'sampler2D' : sampler-constructor first argument must be a scalar *texture* type 
 ERROR: 0:17: 'sampler2D' : sampler-constructor second argument must be a scalar sampler or samplerShadow 
diff --git a/Test/glsl.-P.frag b/Test/glsl.-P.frag
new file mode 100644
index 0000000..72df8de
--- /dev/null
+++ b/Test/glsl.-P.frag
@@ -0,0 +1,20 @@
+#version 450
+
+layout(location=0) out vec4 color;
+
+void main()
+{
+    #ifndef TEST1
+    #error TEST1 is not defined
+    #endif
+
+    #ifndef TEST2
+    #error TEST2 is not defined
+    #endif
+
+    #ifndef TEST3
+    #error TEST3 is not defined
+    #endif
+
+    color = vec4(1.0);
+}
diff --git a/Test/glsl.-P.function.frag b/Test/glsl.-P.function.frag
new file mode 100644
index 0000000..086bb4d
--- /dev/null
+++ b/Test/glsl.-P.function.frag
@@ -0,0 +1,8 @@
+#version 450
+
+layout(location=0) out vec4 color;
+
+void main()
+{
+    color = getColor();
+}
diff --git a/Test/glsl.-P.include.frag b/Test/glsl.-P.include.frag
new file mode 100644
index 0000000..fdadc71
--- /dev/null
+++ b/Test/glsl.-P.include.frag
@@ -0,0 +1,10 @@
+#version 450
+
+#include "glsl.-P.included.glsl"
+
+layout(location=0) out vec4 color;
+
+void main()
+{
+    color = getColor();
+}
diff --git a/Test/glsl.-P.included.glsl b/Test/glsl.-P.included.glsl
new file mode 100644
index 0000000..d870f9f
--- /dev/null
+++ b/Test/glsl.-P.included.glsl
@@ -0,0 +1,4 @@
+vec4 getColor()
+{
+    return vec4(1.0);
+}
diff --git a/Test/glsl.versionOverride.geom b/Test/glsl.versionOverride.geom
index bcfc2f2..691c991 100644
--- a/Test/glsl.versionOverride.geom
+++ b/Test/glsl.versionOverride.geom
@@ -1,6 +1,6 @@
 /*

 

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

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

 

 */

 

diff --git a/Test/glsl.versionOverride.tesc b/Test/glsl.versionOverride.tesc
index 3b7b1e3..a3bd7ed 100644
--- a/Test/glsl.versionOverride.tesc
+++ b/Test/glsl.versionOverride.tesc
@@ -1,6 +1,6 @@
 /*

 

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

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

 

 */

 

diff --git a/Test/glsl.versionOverride.tese b/Test/glsl.versionOverride.tese
index e92d5a9..bbb42d2 100644
--- a/Test/glsl.versionOverride.tese
+++ b/Test/glsl.versionOverride.tese
@@ -1,6 +1,6 @@
 /*

 

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

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

 

 */

 

diff --git a/Test/glslangValidator b/Test/glslangValidator
index 856aa1a..f6b26b4 100755
--- a/Test/glslangValidator
+++ b/Test/glslangValidator
@@ -1,2 +1,2 @@
 #!/usr/bin/env bash
-../build/install/bin/glslangValidator $*
+../build/install/bin/glslang $*
diff --git a/Test/hlsl.conditional.frag b/Test/hlsl.conditional.frag
index 91f75ee..7b6eb7b 100644
--- a/Test/hlsl.conditional.frag
+++ b/Test/hlsl.conditional.frag
@@ -37,6 +37,10 @@
     e = a = b ? c = d : 10, b = a ? d = c : 11;
     float4 f;
     f = ret.x < input.y ? c * input : d * input;
+    uint g = d > 0.0 ? 0b010101u : 0u;

+    uint h = g > 0.0 ? 0B111111u : 0u;

+    uint i = h > 0.0 ? 0b0101u : 0B01;

+    uint j = i > 0.0 ? 0xabcd : 0xbcda;

     return e * ret + f + vectorCond() + scalarCond() +
            float4(fbSelect(bool2(true, false), float2(1.0, 2.0), float2(3.0, 4.0)), 10.0, 10.0);
 }
diff --git a/Test/hlsl.emptystructreturn.tesc b/Test/hlsl.emptystructreturn.tesc
new file mode 100644
index 0000000..bc84893
--- /dev/null
+++ b/Test/hlsl.emptystructreturn.tesc
@@ -0,0 +1,48 @@
+struct HullInputType
+{
+    float4 position : SV_Position;
+};
+
+struct ConstantOutputType
+{
+    float edges[3] : SV_TessFactor;
+    float inside : SV_InsideTessFactor;
+};
+struct EmptyStruct {};
+
+struct HullOutputType {};
+
+void blob(InputPatch<HullInputType, 3> patch)
+{
+}
+
+ConstantOutputType ColorPatchConstantFunction(InputPatch<HullInputType, 3> inputPatch, uint patchId : SV_PrimitiveID)
+{
+    ConstantOutputType output;
+
+	// Set the tessellation factors for the three edges of the triangle.
+    output.edges[0] = 2;
+    output.edges[1] = 2;
+    output.edges[2] = 2;
+
+	// Set the tessellation factor for tessallating inside the triangle.
+    output.inside = 2;
+
+    return output;
+}
+
+
+// Hull Shader
+[domain("tri")]
+[partitioning("integer")]
+[outputtopology("triangle_cw")]
+[outputcontrolpoints(3)]
+[patchconstantfunc("ColorPatchConstantFunction")]
+HullOutputType main(EmptyStruct stage_input, InputPatch<HullInputType, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID)
+{
+    HullOutputType output;
+    blob(patch);
+
+    return output;
+}
+
diff --git a/Test/hlsl.function.frag b/Test/hlsl.function.frag
index 5834b31..6fb44a9 100644
--- a/Test/hlsl.function.frag
+++ b/Test/hlsl.function.frag
@@ -3,9 +3,14 @@
     return 1.0f;

 }

 

-uint fun2(float4 col)

+float4 fun2(float4 const col)

 {

-    return 7;

+    return (1.0f, 2.0f, 3.0f, 4.0f);

+}

+

+uint fun3(const float4 col)

+{

+	return 7;   

 }

 

 float4 fun4(uint id1, uniform uint id2)

@@ -15,7 +20,7 @@
 

 float4 fun1(int index)

 {

-    uint entityId = fun2(fun0());

+    uint entityId = fun3(fun2(fun0()));

     return fun4(entityId, entityId);

 }

 

diff --git a/Test/hlsl.init2.frag b/Test/hlsl.init2.frag
index 2b9b7e6..6dcb6cb 100644
--- a/Test/hlsl.init2.frag
+++ b/Test/hlsl.init2.frag
@@ -21,16 +21,17 @@
     const mystruct2 constTest5 = { {8,}, {9,}, {10}, };
     constTest5.c;
 
-    const float step = 1.f;

-    float n = 0;

-    const float3 a[8] = {

-            normalize(float3(1, 1, 1)) * (n += step),

-            normalize(float3(-1, -1, -1)) * (n += step),

-            normalize(float3(-1, -1, 1)) * (n += step),

-            normalize(float3(-1, 1, -1)) * (n += step),

-            normalize(float3(-1, 1, 1)) * (n += step),

-            normalize(float3(1, -1, -1)) * (n += step),

-            normalize(float3(1, -1, 1)) * (n += step),

+    float const origStep = 1.0f;
+    const float step = origStep;
+    float n = 0;
+    const float3 a[8] = {
+            normalize(float3(1, 1, 1)) * (n += step),
+            normalize(float3(-1, -1, -1)) * (n += step),
+            normalize(float3(-1, -1, 1)) * (n += step),
+            normalize(float3(-1, 1, -1)) * (n += step),
+            normalize(float3(-1, 1, 1)) * (n += step),
+            normalize(float3(1, -1, -1)) * (n += step),
+            normalize(float3(1, -1, 1)) * (n += step),
             normalize(float3(1, 1, -1)) * (n += step) };
 
     const struct one { float3 a; } oneNonConst = { normalize(float3(-1, 1, 1)) * (n += step) };
diff --git a/Test/hlsl.intrinsics.comp b/Test/hlsl.intrinsics.comp
index bce2d27..78f4247 100644
--- a/Test/hlsl.intrinsics.comp
+++ b/Test/hlsl.intrinsics.comp
@@ -12,6 +12,8 @@
 groupshared uint4 gs_ua4;
 groupshared uint4 gs_ub4;
 groupshared uint4 gs_uc4;
+groupshared float gs_fa;
+groupshared float gs_fb;
 
 float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
 {
@@ -36,6 +38,8 @@
     InterlockedXor(gs_ua, gs_ub);
     InterlockedXor(gs_ua, gs_ub, out_u1);
 
+    InterlockedAdd(gs_fa, gs_fb);
+	
     // CheckAccessFullyMapped(3);  // TODO: ...
 
     return 0.0;
diff --git a/Test/hlsl.mintypes.frag b/Test/hlsl.mintypes.frag
index ad47e68..a887562 100644
--- a/Test/hlsl.mintypes.frag
+++ b/Test/hlsl.mintypes.frag
@@ -12,30 +12,75 @@
     min16float2 mf16_2;
     min16float3 mf16_3;
     min16float4 mf16_4;
+    min16float2x2 mf16_2x2;
+    min16float2x3 mf16_2x3;
+    min16float2x4 mf16_2x4;
+    min16float3x2 mf16_3x2;
+    min16float3x3 mf16_3x3;
+    min16float3x4 mf16_3x4;
+    min16float4x2 mf16_4x2;
+    min16float4x3 mf16_4x3;
+    min16float4x4 mf16_4x4;
 
     min10float  mf10;
     min10float1 mf10_1;
     min10float2 mf10_2;
     min10float3 mf10_3;
-    min10float4 mf12_4;
+    min10float4 mf10_4;
+    min10float2x2 mf10_2x2;
+    min10float2x3 mf10_2x3;
+    min10float2x4 mf10_2x4;
+    min10float3x2 mf10_3x2;
+    min10float3x3 mf10_3x3;
+    min10float3x4 mf10_3x4;
+    min10float4x2 mf10_4x2;
+    min10float4x3 mf10_4x3;
+    min10float4x4 mf10_4x4;
 
     min16int  mi16;
     min16int1 mi16_1;
     min16int2 mi16_2;
     min16int3 mi16_3;
     min16int4 mi16_4;
+    min16int2x2 mi16_2x2;
+    min16int2x3 mi16_2x3;
+    min16int2x4 mi16_2x4;
+    min16int3x2 mi16_3x2;
+    min16int3x3 mi16_3x3;
+    min16int3x4 mi16_3x4;
+    min16int4x2 mi16_4x2;
+    min16int4x3 mi16_4x3;
+    min16int4x4 mi16_4x4;
 
     min12int  mi12;
     min12int1 mi12_1;
     min12int2 mi12_2;
     min12int3 mi12_3;
     min12int4 mi12_4;
+    min12int2x2 mi12_2x2;
+    min12int2x3 mi12_2x3;
+    min12int2x4 mi12_2x4;
+    min12int3x2 mi12_3x2;
+    min12int3x3 mi12_3x3;
+    min12int3x4 mi12_3x4;
+    min12int4x2 mi12_4x2;
+    min12int4x3 mi12_4x3;
+    min12int4x4 mi12_4x4;
 
     min16uint  mu16;
     min16uint1 mu16_1;
     min16uint2 mu16_2;
     min16uint3 mu16_3;
     min16uint4 mu16_4;
+    min16uint2x2 mu16_2x2;
+    min16uint2x3 mu16_2x3;
+    min16uint2x4 mu16_2x4;
+    min16uint3x2 mu16_3x2;
+    min16uint3x3 mu16_3x3;
+    min16uint3x4 mu16_3x4;
+    min16uint4x2 mu16_4x2;
+    min16uint4x3 mu16_4x3;
+    min16uint4x4 mu16_4x4;
 
     mf16_2 + mf16;
     mf10_2 + mf10;
@@ -43,6 +88,20 @@
     mi12_2 + mi12;
     mu16_2 + mu16;
 
+    mul(mf16_2, mf16_2x4);
+    mul(mf16_3, mf16_3x4);
+    mul(mf16_4, mf16_4x4);
+    mul(mf16_4x2, mf16_2);
+    mul(mf16_4x3, mf16_3);
+    mul(mf16_4x4, mf16_4);
+
+    mul(mf10_2, mf10_2x4);
+    mul(mf10_3, mf10_3x4);
+    mul(mf10_4, mf10_4x4);
+    mul(mf10_4x2, mf10_2);
+    mul(mf10_4x3, mf10_3);
+    mul(mf10_4x4, mf10_4);
+
     PS_OUTPUT psout;
     psout.Color = 0;
     return psout;
diff --git a/Test/hlsl.nested-runtimeArray.frag b/Test/hlsl.nested-runtimeArray.frag
new file mode 100644
index 0000000..3606ada
--- /dev/null
+++ b/Test/hlsl.nested-runtimeArray.frag
@@ -0,0 +1,9 @@
+struct A {
+    float a[];
+};
+
+RWStructuredBuffer <A> B;
+
+float main() {
+    return B[0].a[0];
+}
diff --git a/Test/hlsl.numericsuffixes.frag b/Test/hlsl.numericsuffixes.frag
index bccb786..e16d374 100644
--- a/Test/hlsl.numericsuffixes.frag
+++ b/Test/hlsl.numericsuffixes.frag
@@ -1,6 +1,9 @@
 
 struct PS_OUTPUT { float4 color : SV_Target0; };
 
+#define BIN_UINT 0b00001u
+#define BIN_INT  0b00011
+
 PS_OUTPUT main()
 {
     // Test numeric suffixes
@@ -8,7 +11,7 @@
     uint  r01 = 1u;      // lower uint
     uint  r02 = 2U;      // upper uint
     uint  r03 = 0xabcu;  // lower hex uint
-    uint  r04 = 0xABCU;  // upper hex uint (upper 0X is not accepted)
+    uint  r04 = 0XABCU;  // upper hex uint
     int   r05 = 5l;      // lower long int
     int   r06 = 6L;      // upper long int
     int   r07 = 071;     // octal
@@ -17,6 +20,12 @@
     float r10 = 1.H;     // half
     float r11 = 1.1h;    // half
     float r12 = 1.1H;    // half
+    uint  r13 = 0b00001u;// lower binary uint
+    uint  r14 = 0B00010U;// upper binary uint
+    int   r15 = 0b00011; // lower binary int
+    int   r16 = 0B00100; // upper binary int
+    uint  r17 = BIN_UINT;// lower binart define uint
+    int   r18 = BIN_INT; // lower binart define int
 
     PS_OUTPUT ps_output;
     ps_output.color = r07; // gets 71 octal = 57 decimal
diff --git a/Test/hlsl.numericsuffixes.negative.frag b/Test/hlsl.numericsuffixes.negative.frag
new file mode 100644
index 0000000..ce512fd
--- /dev/null
+++ b/Test/hlsl.numericsuffixes.negative.frag
@@ -0,0 +1,15 @@
+
+struct PS_OUTPUT { float4 color : SV_Target0; };
+
+PS_OUTPUT main()
+{
+    // Test numeric suffixes
+    uint  r01 = 0bERROR321u; // Bad digit
+    uint  r02 = 0b11111111111111111111111111111111111111111111111111111111111111111u; // To big
+    uint  r03 = 0xTESTu // Bad digit
+    uint  r04 = 0xFFFFFFFFFFFFFFFFFFu; // To big
+    
+    PS_OUTPUT ps_output;
+    ps_output.color = r01;
+    return ps_output;
+}
diff --git a/Test/hlsl.structcopy.comp b/Test/hlsl.structcopy.comp
new file mode 100644
index 0000000..3789884
--- /dev/null
+++ b/Test/hlsl.structcopy.comp
@@ -0,0 +1,28 @@
+struct MyStruct {
+    uint a;
+    uint b;
+    uint c;
+};
+
+struct MyStructs {
+    uint count;
+    MyStruct data[];
+};
+
+StructuredBuffer<MyStructs> sb;
+StructuredBuffer<MyStruct> o;
+
+groupshared MyStruct s[128];
+static const MyStruct deflt = { 1u, 2u, 3u };
+
+[numthreads(128, 1, 1)]
+void main(uint id : SV_GroupIndex)
+{
+        s[0] = deflt;
+        uint count = sb.Load(0).count;
+        MyStruct ms = id > count ? s[id - count] : sb.Load(0).data[id];
+
+        InterlockedAdd(o[0].a, ms.a);
+        InterlockedAdd(o[0].b, ms.b);
+        InterlockedAdd(o[0].c, ms.c);
+}
diff --git a/Test/hlsl.structcopylogical.comp b/Test/hlsl.structcopylogical.comp
new file mode 100644
index 0000000..3789884
--- /dev/null
+++ b/Test/hlsl.structcopylogical.comp
@@ -0,0 +1,28 @@
+struct MyStruct {
+    uint a;
+    uint b;
+    uint c;
+};
+
+struct MyStructs {
+    uint count;
+    MyStruct data[];
+};
+
+StructuredBuffer<MyStructs> sb;
+StructuredBuffer<MyStruct> o;
+
+groupshared MyStruct s[128];
+static const MyStruct deflt = { 1u, 2u, 3u };
+
+[numthreads(128, 1, 1)]
+void main(uint id : SV_GroupIndex)
+{
+        s[0] = deflt;
+        uint count = sb.Load(0).count;
+        MyStruct ms = id > count ? s[id - count] : sb.Load(0).data[id];
+
+        InterlockedAdd(o[0].a, ms.a);
+        InterlockedAdd(o[0].b, ms.b);
+        InterlockedAdd(o[0].c, ms.c);
+}
diff --git a/Test/implicitArraySize.frag b/Test/implicitArraySize.frag
new file mode 100644
index 0000000..ca3eeb3
--- /dev/null
+++ b/Test/implicitArraySize.frag
@@ -0,0 +1,9 @@
+#version 460 core
+in float a[];
+in float c[3];
+out float b[5];
+
+void main(){
+  b[0] = a[1];
+  b[1] = c[1];
+}
\ No newline at end of file
diff --git a/Test/implicitArraySize.vert b/Test/implicitArraySize.vert
new file mode 100644
index 0000000..93e7495
--- /dev/null
+++ b/Test/implicitArraySize.vert
@@ -0,0 +1,8 @@
+#version 460 core
+out float a[];
+out float c[];
+
+void main(){
+  a[0] = 0.1;
+  c[5] = 0.1;
+}
\ No newline at end of file
diff --git a/Test/implicitArraySize1.geom b/Test/implicitArraySize1.geom
new file mode 100644
index 0000000..b3b52ea
--- /dev/null
+++ b/Test/implicitArraySize1.geom
@@ -0,0 +1,14 @@
+#version 460 core
+
+layout(triangles) in;
+layout(line_strip, max_vertices = 204) out;
+
+void f();
+
+in float g[][3];
+out float o[3];
+
+void main(){
+  f();
+  o[1] = g[2][1];
+}
\ No newline at end of file
diff --git a/Test/implicitArraySize2.geom b/Test/implicitArraySize2.geom
new file mode 100644
index 0000000..0bb65cd
--- /dev/null
+++ b/Test/implicitArraySize2.geom
@@ -0,0 +1,8 @@
+#version 460 core
+
+in float g[][3];
+out float o[];
+
+void f(){
+  o[1] = g[1][1];
+}
\ No newline at end of file
diff --git a/Test/implicitArraySizeBuiltin.geom b/Test/implicitArraySizeBuiltin.geom
new file mode 100644
index 0000000..419b633
--- /dev/null
+++ b/Test/implicitArraySizeBuiltin.geom
@@ -0,0 +1,20 @@
+#version 460 core
+
+layout(triangles) in;
+layout(line_strip, max_vertices = 204) out;
+
+void f2(float x)
+{
+    gl_ClipDistance[6] = gl_in[0].gl_ClipDistance[6];
+}
+void f3(float x)
+{
+    gl_CullDistance[1] = gl_in[0].gl_CullDistance[1];
+}
+
+void main(){
+  #if defined(CLIP)
+  f2(0.1);
+  #endif
+  f3(0.1);
+}
\ No newline at end of file
diff --git a/Test/implicitArraySizeBuiltin.vert b/Test/implicitArraySizeBuiltin.vert
new file mode 100644
index 0000000..251e975
--- /dev/null
+++ b/Test/implicitArraySizeBuiltin.vert
@@ -0,0 +1,11 @@
+#version 460 core
+
+void f1(float x)
+{
+    gl_ClipDistance[6] = x;
+    gl_CullDistance[1] = x;
+}
+
+void main(){
+  f1(0.1);
+}
\ No newline at end of file
diff --git a/Test/makeDoc b/Test/makeDoc
index c9d598e..102dc9a 100644
--- a/Test/makeDoc
+++ b/Test/makeDoc
@@ -1,3 +1,3 @@
 #!/usr/bin/env bash
-./glslangValidator -p > instDesc
+./glslang -p > instDesc
 asciidoc --backend=html5 instDesc
diff --git a/Test/preprocessor.function_macro.vert b/Test/preprocessor.function_macro.vert
index 577ea7e..9f43786 100644
--- a/Test/preprocessor.function_macro.vert
+++ b/Test/preprocessor.function_macro.vert
@@ -13,8 +13,11 @@
   )\

 4 + 3 + Y

 

+#define F F.a

+

 int main() {

   gl_Position = vec4(X(3), Y(3, 4), Z(3));

   gl_Position = vec4(REALLY_LONG_MACRO_NAME_WITH_MANY_PARAMETERS(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12));

   gl_Position = vec4(A(3));

+  gl_Position = A(F);

 }

diff --git a/Test/rayQuery-allOps.comp b/Test/rayQuery-allOps.comp
index 3a2a8d0..6f04175 100644
--- a/Test/rayQuery-allOps.comp
+++ b/Test/rayQuery-allOps.comp
@@ -1,6 +1,7 @@
 #version 460
 #extension GL_EXT_ray_query : enable
 #extension GL_EXT_ray_flags_primitive_culling : enable
+#extension GL_EXT_ray_tracing_position_fetch : enable
 
 layout(primitive_culling);
 struct Ray
@@ -147,6 +148,14 @@
             {
                 doSomething();
             }
+            {
+                vec3 positions[3];
+                rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQuery, true, positions);
+                if (positions[0].x < 0 && positions[2].y > 0)
+                {
+                    doSomething();
+                }
+            }
             break;
 
         case gl_RayQueryCommittedIntersectionGeneratedEXT :
diff --git a/Test/runtests b/Test/runtests
index 2ee0db0..e7e1d33 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -2,12 +2,12 @@
 
 # Arguments:
 #  1- TargetDirectory, where to write test results and intermediary files
-#  2- Path to glslangValidator
+#  2- Path to glslang
 #  3- Path to spirv-remap
 
 TARGETDIR=${1:-localResults}
 BASEDIR=baseResults
-EXE=${2:-../build/install/bin/glslangValidator}
+EXE=${2:-../build/install/bin/glslang}
 REMAPEXE=${3:-../build/install/bin/spirv-remap}
 HASERROR=0
 mkdir -p $TARGETDIR
@@ -18,7 +18,7 @@
 fi
 
 function run {
-    $EXE $@
+    $EXE "$@"
     result=$?
     case "$result" in
     [0-6]) # Valid success and error codes
@@ -201,13 +201,19 @@
 diff -b $BASEDIR/hlsl.dashI.vert.d.out $TARGETDIR/hlsl.dashI.vert.d.out || HASERROR=1
 
 #
-# Testing -D and -U
+# Testing -D, -U and -P
 #
-echo "Testing -D and -U"
+echo "Testing -D, -U and -P"
 run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
 diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
 run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
 diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
+run -P"#define TEST1" -i -l --preamble-text "#define TEST2" --p "#define TEST3" glsl.-P.frag > $TARGETDIR/glsl.-P.frag.out
+diff -b $BASEDIR/glsl.-P.frag.out $TARGETDIR/glsl.-P.frag.out || HASERROR=1
+run -i -l --preamble-text "vec4 getColor() { return vec4(1.0); }" glsl.-P.function.frag > $TARGETDIR/glsl.-P.function.frag.out
+diff -b $BASEDIR/glsl.-P.function.frag.out $TARGETDIR/glsl.-P.function.frag.out || HASERROR=1
+run -i -l --preamble-text "#extension GL_GOOGLE_include_directive : require" -I. glsl.-P.include.frag > $TARGETDIR/glsl.-P.include.frag.out
+diff -b $BASEDIR/glsl.-P.include.frag.out $TARGETDIR/glsl.-P.include.frag.out || HASERROR=1
 
 #
 # Test --client and --target-env
diff --git a/Test/spv.ARMCoreBuiltIns.frag b/Test/spv.ARMCoreBuiltIns.frag
new file mode 100644
index 0000000..deb3e55
--- /dev/null
+++ b/Test/spv.ARMCoreBuiltIns.frag
@@ -0,0 +1,8 @@
+#version 450
+#extension GL_ARM_shader_core_builtins: enable
+layout(location = 0) out uvec4 data;
+void main (void)
+{
+  uint temp = gl_WarpMaxIDARM;
+  data = uvec4(gl_CoreIDARM, gl_CoreCountARM, gl_CoreMaxIDARM, gl_WarpIDARM + temp);
+}
diff --git a/Test/spv.ARMCoreBuiltIns.vert b/Test/spv.ARMCoreBuiltIns.vert
new file mode 100644
index 0000000..2bed18e
--- /dev/null
+++ b/Test/spv.ARMCoreBuiltIns.vert
@@ -0,0 +1,12 @@
+#version 450
+#extension GL_ARM_shader_core_builtins: enable
+layout(set = 0, binding = 0, std430) buffer Output
+{
+  uvec4 result;
+};
+
+void main (void)
+{
+  uint temp = gl_WarpMaxIDARM;
+  result = uvec4(gl_CoreIDARM, gl_CoreCountARM, gl_CoreMaxIDARM, gl_WarpIDARM + temp);
+}
diff --git a/Test/spv.bufferhandle8.frag b/Test/spv.bufferhandle8.frag
index 1bc13c3..9265135 100644
--- a/Test/spv.bufferhandle8.frag
+++ b/Test/spv.bufferhandle8.frag
@@ -27,6 +27,8 @@
   Blah Bindings[];

 } t3;

 

+

 void main() {

+    Blah x = t3.Bindings[2];

     t3.Bindings[0] = t3.Bindings[1];

 }

diff --git a/Test/spv.debugInfo.frag b/Test/spv.debugInfo.frag
index 3b6cd27..31b6334 100644
--- a/Test/spv.debugInfo.frag
+++ b/Test/spv.debugInfo.frag
@@ -25,9 +25,40 @@
     return r;

 }

 

+float testBranch(float x, float y)

+{

+    float result = 0;

+    bool b = x > 0;

+

+    // branch with load

+    if (b) {

+        result += 1;

+    }

+    else {

+        result -= 1;

+    }

+

+    // branch with expression

+    if (x > y) {

+        result += x - y;

+    }

+

+    // selection with load

+    result += b ?

+        1 : -1;

+

+    // selection with expression

+    result += x < y ? 

+        y : 

+        float(b);

+

+    return result;

+}

+

 void main()

 {

     outv = foo(s);

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

     outv += texture(s2d, vec2(0.5));

 

     switch (s.a) {

diff --git a/Test/spv.debuginfo.const_params.glsl.comp b/Test/spv.debuginfo.const_params.glsl.comp
new file mode 100644
index 0000000..112628f
--- /dev/null
+++ b/Test/spv.debuginfo.const_params.glsl.comp
@@ -0,0 +1,14 @@
+#version 450
+
+void function(
+    const float f,
+    const vec2 f2,
+    const vec3 f3,
+    const vec4 f4)
+{
+}
+
+void main()
+{
+    function(0, vec2(0), vec3(0), vec4(0));
+}
diff --git a/Test/spv.debuginfo.glsl.frag b/Test/spv.debuginfo.glsl.frag
index bf5f622..86316af 100644
--- a/Test/spv.debuginfo.glsl.frag
+++ b/Test/spv.debuginfo.glsl.frag
@@ -38,6 +38,8 @@
 #define AMBIENT_LIGHT 0.1
 #define USE_PCF
 
+int global_var = 0;
+
 struct Light 
 {
 	vec4 position;
diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit
old mode 100644
new mode 100755
index 44c32d9..2d33a00
--- a/Test/spv.ext.AnyHitShader.rahit
+++ b/Test/spv.ext.AnyHitShader.rahit
@@ -2,6 +2,7 @@
 #extension GL_EXT_ray_tracing : enable
 #extension GL_KHR_shader_subgroup_basic : enable
 #extension GL_EXT_ray_cull_mask : enable
+#extension GL_EXT_ray_tracing_position_fetch : enable
 
 layout(location = 1) rayPayloadInEXT vec4 incomingPayload;
 void main()
@@ -25,6 +26,7 @@
     mat3x4 v16 = gl_ObjectToWorld3x4EXT;
     mat3x4 v17 = gl_WorldToObject3x4EXT;
 	uint v18 = gl_CullMaskEXT;
+	vec3 v19 = gl_HitTriangleVertexPositionsEXT[0];
 	incomingPayload = vec4(0.5f);
 	if (v2 == 1) {
 	    ignoreIntersectionEXT;
diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit
old mode 100644
new mode 100755
index 8b5f848..0949629
--- a/Test/spv.ext.ClosestHitShader.rchit
+++ b/Test/spv.ext.ClosestHitShader.rchit
@@ -1,6 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : enable
 #extension GL_EXT_ray_cull_mask : enable
+#extension GL_EXT_ray_tracing_position_fetch : enable
 
 layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT;
 layout(location = 0) rayPayloadEXT vec4 localPayload;
@@ -26,5 +27,6 @@
     mat3x4 v16 = gl_ObjectToWorld3x4EXT;
     mat3x4 v17 = gl_WorldToObject3x4EXT;
 	uint v18 = gl_CullMaskEXT;
+	vec3 v19 = gl_HitTriangleVertexPositionsEXT[0];
 	traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1);
 }
diff --git a/Test/spv.ext.ShaderTileImage.color.frag b/Test/spv.ext.ShaderTileImage.color.frag
new file mode 100644
index 0000000..f3b5530
--- /dev/null
+++ b/Test/spv.ext.ShaderTileImage.color.frag
@@ -0,0 +1,12 @@
+#version 460
+#extension GL_EXT_shader_tile_image : require
+
+precision highp float;
+
+layout(location=1) tileImageEXT highp attachmentEXT in_color;
+layout(location=0) out highp vec4 out_color;
+
+void main(void)
+{
+     out_color = colorAttachmentReadEXT(in_color);
+}
diff --git a/Test/spv.ext.ShaderTileImage.depth_stencil.frag b/Test/spv.ext.ShaderTileImage.depth_stencil.frag
new file mode 100644
index 0000000..faf9d93
--- /dev/null
+++ b/Test/spv.ext.ShaderTileImage.depth_stencil.frag
@@ -0,0 +1,16 @@
+#version 460
+#extension GL_EXT_shader_tile_image : require
+
+precision highp float;
+
+layout(location=0) out highp uvec4 stencil_out;
+layout(location=1) out highp vec4 depth_out;
+
+
+void main(void)
+{
+    float depth = depthAttachmentReadEXT();
+    uint stencil_value = stencilAttachmentReadEXT();
+    stencil_out = uvec4(stencil_value,0,0,0);
+    depth_out = vec4(depth,0.0,0.0,0.0);
+}
diff --git a/Test/spv.ext.ShaderTileImage.overlap.frag b/Test/spv.ext.ShaderTileImage.overlap.frag
new file mode 100644
index 0000000..98a44e4
--- /dev/null
+++ b/Test/spv.ext.ShaderTileImage.overlap.frag
@@ -0,0 +1,15 @@
+#version 460
+#extension GL_EXT_shader_tile_image : require
+
+precision mediump int;
+precision highp float;
+
+layout(location=0) tileImageEXT highp attachmentEXT in_color[2];
+layout(location=1) tileImageEXT highp attachmentEXT in_color_1;
+layout(location=1) out highp vec4 out_color;
+
+void main(void)
+{
+     out_color = colorAttachmentReadEXT(in_color[0]);
+     out_color += colorAttachmentReadEXT(in_color_1);
+}
diff --git a/Test/spv.ext.ShaderTileImage.subpassinput.frag b/Test/spv.ext.ShaderTileImage.subpassinput.frag
new file mode 100644
index 0000000..ec0e85e
--- /dev/null
+++ b/Test/spv.ext.ShaderTileImage.subpassinput.frag
@@ -0,0 +1,13 @@
+#version 450
+#extension GL_EXT_shader_tile_image : require
+
+precision highp float;
+
+layout(set = 0, binding = 0, input_attachment_index = 0) uniform subpassInput i;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+  fragColor = subpassLoad(i);
+}
diff --git a/Test/spv.ext.ShaderTileImage.typemismatch.frag b/Test/spv.ext.ShaderTileImage.typemismatch.frag
new file mode 100644
index 0000000..170bfab
--- /dev/null
+++ b/Test/spv.ext.ShaderTileImage.typemismatch.frag
@@ -0,0 +1,13 @@
+#version 320 es
+#extension GL_EXT_shader_tile_image : require
+
+layout(non_coherent_color_attachment_readEXT) in;
+
+layout(location=0) tileImageEXT highp iattachmentEXT in_color_i;
+layout(location=0) out highp vec4 out_color_f;
+
+void main(void)
+{
+     highp ivec4 read = colorAttachmentReadEXT(in_color_i);
+     out_color_f = vec4(read);
+}
diff --git a/Test/spv.ext.ShaderTileImage.wronglayout.frag b/Test/spv.ext.ShaderTileImage.wronglayout.frag
new file mode 100644
index 0000000..7cc06ed
--- /dev/null
+++ b/Test/spv.ext.ShaderTileImage.wronglayout.frag
@@ -0,0 +1,13 @@
+#version 460
+#extension GL_EXT_shader_tile_image : require
+
+precision highp float;
+precision mediump int;
+
+layout(binding=0, set=0, input_attachment_index=0) tileImageEXT highp attachmentEXT in_color;
+layout(location=0) out highp vec4 out_color;
+
+void main(void)
+{
+     out_color = colorAttachmentReadEXT(in_color);
+}
diff --git a/Test/spv.intrinsicsSpirvDecorateId.comp b/Test/spv.intrinsicsSpirvDecorateId.comp
new file mode 100644
index 0000000..58a35d6
--- /dev/null
+++ b/Test/spv.intrinsicsSpirvDecorateId.comp
@@ -0,0 +1,16 @@
+#version 460 core

+#extension GL_EXT_spirv_intrinsics: enable

+

+layout(local_size_x = 1) in;

+

+layout(binding = 1) uniform CounterBuffer {

+  uint counter;

+} x;

+

+layout(binding = 0) spirv_decorate_id(extensions = ["SPV_GOOGLE_hlsl_functionality1"], 5634, x) uniform Uniform {

+  uint y;

+};

+

+void main()

+{

+}

diff --git a/Test/spv.intrinsicsSpirvDecorateString.comp b/Test/spv.intrinsicsSpirvDecorateString.comp
new file mode 100644
index 0000000..7de65fc
--- /dev/null
+++ b/Test/spv.intrinsicsSpirvDecorateString.comp
@@ -0,0 +1,15 @@
+#version 460 core

+#extension GL_EXT_spirv_intrinsics : require

+

+spirv_decorate_string(extensions = ["SPV_GOOGLE_hlsl_functionality1"], 5635, "foobar")  // UserSemantic

+spirv_decorate(0)                                                                       // RelaxedPrecision

+float x = 0.5;

+

+spirv_decorate(0)                                                                    // RelaxedPrecision

+spirv_decorate_string(extensions = ["SPV_GOOGLE_hlsl_functionality1"], 5635, "foobar")  // UserSemantic

+float y = 1.0;

+

+layout(local_size_x = 1) in;

+void main()

+{

+}

diff --git a/Test/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert b/Test/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert
new file mode 100644
index 0000000..f17da98
--- /dev/null
+++ b/Test/spv.intrinsicsSpirvTypeWithTypeSpecifier.vert
@@ -0,0 +1,25 @@
+#version 450 core

+

+#extension GL_ARB_gpu_shader_int64: enable

+#extension GL_EXT_buffer_reference: enable

+#extension GL_EXT_spirv_intrinsics: enable

+

+#define CapabilityPhysicalStorageBufferAddresses   5347

+#define StorageClassPhysicalStorageBuffer          5349

+#define OpTypePointer                              32

+#define OpLoad                                     61

+#define OpConvertUToPtr                            120

+

+#define uintStoragePtr spirv_type(extensions = ["SPV_EXT_physical_storage_buffer", "SPV_KHR_variable_pointers"], capabilities = [CapabilityPhysicalStorageBufferAddresses], id = OpTypePointer, StorageClassPhysicalStorageBuffer, uint)

+

+// Just to enable the memory model of physical storage buffer

+layout(buffer_reference, std430) buffer Dummy {

+  uint dummy;

+};

+

+spirv_instruction(id = OpLoad) uint loadUint(uintStoragePtr pointer, spirv_literal uint memoryOperands, spirv_literal uint alignment);

+spirv_instruction(id = OpConvertUToPtr) uintStoragePtr convertToPtr(uint64_t value);

+

+void main() {

+  uint value = loadUint(convertToPtr(1), 0x2, 32);

+}

diff --git a/Test/spv.nv.hitobject-allops.rchit b/Test/spv.nv.hitobject-allops.rchit
new file mode 100644
index 0000000..e7db359
--- /dev/null
+++ b/Test/spv.nv.hitobject-allops.rchit
@@ -0,0 +1,55 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_NV_shader_invocation_reorder : enable
+#extension GL_NV_ray_tracing_motion_blur : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; };
+layout(location = 2) hitObjectAttributeNV vec2 attr;
+layout(location = 3) hitObjectAttributeNV hBlock { float attrval;};
+layout(binding = 0) uniform accelerationStructureEXT as;
+layout(binding = 1) buffer block {
+	float op;
+};
+void main()
+{
+	hitObjectNV hObj;
+	hitObjectNV hObjHit, hObjMiss, hObjNop;
+	attr = vec2(1.0);
+	attrval = 2.0;
+	hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1);
+	hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2);
+	hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2);
+	hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2);
+	hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3);
+	hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3);
+	hitObjectRecordEmptyNV(hObjNop);
+	hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0);
+	hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f);
+	hitObjectExecuteShaderNV(hObjHit, 2);
+	if (hitObjectIsHitNV(hObj)) { 
+		op = 1.0f;
+	} else if (hitObjectIsMissNV(hObj)) {
+		op = 2.0f;
+	} else if (hitObjectIsEmptyNV(hObj)) {
+		op = 3.0f;
+	}
+	
+
+	float tmin = hitObjectGetRayTMinNV(hObjHit);
+	float tmax = hitObjectGetRayTMaxNV(hObjHit);
+	vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit);
+	vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit);
+	vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit);
+	vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit);
+	mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit);
+	mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit);
+	int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss);
+	int iid = hitObjectGetInstanceIdNV(hObjNop);
+	int pid = hitObjectGetPrimitiveIndexNV(hObj);
+	int gid = hitObjectGetGeometryIndexNV(hObj);
+	uint hkind = hitObjectGetHitKindNV(hObj);
+	hitObjectGetAttributesNV(hObj, 2);
+	uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj);
+	uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj);
+	
+}
diff --git a/Test/spv.nv.hitobject-allops.rgen b/Test/spv.nv.hitobject-allops.rgen
new file mode 100644
index 0000000..f2f37f7
--- /dev/null
+++ b/Test/spv.nv.hitobject-allops.rgen
@@ -0,0 +1,61 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_NV_shader_invocation_reorder : enable
+#extension GL_NV_ray_tracing_motion_blur : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; };
+layout(location = 2) hitObjectAttributeNV vec2 attr;
+layout(location = 3) hitObjectAttributeNV hBlock { float attrval;};
+layout(binding = 0) uniform accelerationStructureEXT as;
+layout(binding = 1) buffer block {
+	float op;
+};
+void main()
+{
+	hitObjectNV hObj;
+	hitObjectNV hObjHit, hObjMiss, hObjNop;
+	attr = vec2(1.0);
+	attrval = 2.0;
+	hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1);
+	hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2);
+	hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2);
+	hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2);
+	hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3);
+	hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3);
+	hitObjectRecordEmptyNV(hObjNop);
+	hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0);
+	hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f);
+	hitObjectExecuteShaderNV(hObjHit, 1);
+	if (hitObjectIsHitNV(hObj)) { 
+		op = 1.0f;
+	} else if (hitObjectIsMissNV(hObj)) {
+		op = 2.0f;
+	} else if (hitObjectIsEmptyNV(hObj)) {
+		op = 3.0f;
+	}
+	
+
+	float tmin = hitObjectGetRayTMinNV(hObjHit);
+	float tmax = hitObjectGetRayTMaxNV(hObjHit);
+	vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit);
+	vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit);
+	vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit);
+	vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit);
+	mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit);
+	mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit);
+	int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss);
+	int iid = hitObjectGetInstanceIdNV(hObjNop);
+	int pid = hitObjectGetPrimitiveIndexNV(hObj);
+	int gid = hitObjectGetGeometryIndexNV(hObj);
+	uint hkind = hitObjectGetHitKindNV(hObj);
+	hitObjectGetAttributesNV(hObj, 2);
+	uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj);
+	uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj);
+	reorderThreadNV(4,4);
+	reorderThreadNV(hObjHit);
+	reorderThreadNV(hObjHit, 4, 2);
+
+	
+	
+	
+}
diff --git a/Test/spv.nv.hitobject-allops.rmiss b/Test/spv.nv.hitobject-allops.rmiss
new file mode 100644
index 0000000..045e4a5
--- /dev/null
+++ b/Test/spv.nv.hitobject-allops.rmiss
@@ -0,0 +1,58 @@
+#version 460
+#extension GL_EXT_ray_tracing : enable
+#extension GL_NV_shader_invocation_reorder : enable
+#extension GL_NV_ray_tracing_motion_blur : enable
+layout(location = 1) rayPayloadEXT vec4 payload;
+layout(location = 2) rayPayloadEXT pBlock { vec2 val1; vec2 val2; };
+layout(location = 2) hitObjectAttributeNV vec2 attr;
+layout(location = 3) hitObjectAttributeNV hBlock { float attrval;};
+layout(binding = 0) uniform accelerationStructureEXT as;
+layout(binding = 1) buffer block {
+	float op;
+};
+void main()
+{
+	hitObjectNV hObj;
+	hitObjectNV hObjHit, hObjMiss, hObjNop;
+	attr = vec2(1.0);
+	attrval = 2.0;
+	hitObjectTraceRayNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 1);
+	hitObjectTraceRayMotionNV(hObj, as, 1U, 1U, 1U, 1U, 1U, vec3(0.5), 0.5, vec3(1), 1.0, 10.0, 2);
+	hitObjectRecordHitNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 2);
+	hitObjectRecordHitMotionNV(hObj, as, 1, 1, 1, 2U, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 2);
+	hitObjectRecordHitWithIndexNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 3);
+	hitObjectRecordHitWithIndexMotionNV(hObjHit, as, 1, 1, 1, 2U, 2U, vec3(1), 1.0f, vec3(2), 2.0f, 4.0f, 3);
+	hitObjectRecordEmptyNV(hObjNop);
+	hitObjectRecordMissNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0);
+	hitObjectRecordMissMotionNV(hObjMiss, 1U, vec3(0.5), 2.0, vec3(1.5), 5.0, 8.0f);
+	hitObjectExecuteShaderNV(hObjHit, 2);
+	if (hitObjectIsHitNV(hObj)) { 
+		op = 1.0f;
+	} else if (hitObjectIsMissNV(hObj)) {
+		op = 2.0f;
+	} else if (hitObjectIsEmptyNV(hObj)) {
+		op = 3.0f;
+	}
+	
+
+	float tmin = hitObjectGetRayTMinNV(hObjHit);
+	float tmax = hitObjectGetRayTMaxNV(hObjHit);
+	vec3 orig = hitObjectGetWorldRayOriginNV(hObjHit);
+	vec3 dir = hitObjectGetWorldRayDirectionNV(hObjHit);
+	vec3 oorig = hitObjectGetObjectRayOriginNV(hObjHit);
+	vec3 odir = hitObjectGetObjectRayDirectionNV(hObjHit);
+	mat4x3 otw = hitObjectGetObjectToWorldNV(hObjHit);
+	mat4x3 wto = hitObjectGetWorldToObjectNV(hObjHit);
+	int cid = hitObjectGetInstanceCustomIndexNV(hObjMiss);
+	int iid = hitObjectGetInstanceIdNV(hObjNop);
+	int pid = hitObjectGetPrimitiveIndexNV(hObj);
+	int gid = hitObjectGetGeometryIndexNV(hObj);
+	uint hkind = hitObjectGetHitKindNV(hObj);
+	hitObjectGetAttributesNV(hObj, 2);
+	uvec2 handle = hitObjectGetShaderRecordBufferHandleNV(hObj);
+	uint rid = hitObjectGetShaderBindingTableRecordIndexNV(hObj);
+
+	
+	
+	
+}
diff --git a/Test/spv.structCopy.comp b/Test/spv.structCopy.comp
new file mode 100644
index 0000000..f915f54
--- /dev/null
+++ b/Test/spv.structCopy.comp
@@ -0,0 +1,37 @@
+#version 460
+layout(local_size_x = 512, local_size_y = 1) in;
+layout(std430) buffer;
+
+struct MyStruct {
+  uint a;
+  uint b;
+  uint c;
+};
+
+layout(binding = 0) buffer MyStructs {
+  uint count;
+  MyStruct data[];
+}
+my_structs;
+
+layout(binding = 1) buffer Output {
+  uint a;
+  uint b;
+  uint c;
+}
+o;
+
+shared MyStruct s[512];
+
+void main() {
+  s[0] = MyStruct(1, 2, 3);
+
+  uint id = gl_GlobalInvocationID.x;
+  MyStruct ms =
+      id > my_structs.count ? s[id - my_structs.count] : my_structs.data[id];
+
+  atomicAdd(o.a, ms.a);
+  atomicAdd(o.b, ms.b);
+  atomicAdd(o.c, ms.c);
+}
+
diff --git a/Test/struct.error.frag b/Test/struct.error.frag
new file mode 100644
index 0000000..29aba00
--- /dev/null
+++ b/Test/struct.error.frag
@@ -0,0 +1,14 @@
+#version 460
+
+struct A {
+	float x;
+};
+
+A test() {
+	return A(1.0);
+}
+
+void main() {
+	test().z; // A.z does not exist, causes a crash
+}
+
diff --git a/Test/tokenLength.vert b/Test/tokenLength.vert
index 21d446f..325fbcb 100644
--- a/Test/tokenLength.vert
+++ b/Test/tokenLength.vert
@@ -70,3 +70,5 @@
 #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 #error in super long macro #if
 #endif
+
+int BE = 0b01u; // ERROR (not supported by GLSL)
diff --git a/Test/validate-shaders.sh b/Test/validate-shaders.sh
index 89dc955..c841969 100755
--- a/Test/validate-shaders.sh
+++ b/Test/validate-shaders.sh
@@ -4,7 +4,7 @@
 # It is not meant to preclude the possible addition of the validator to
 # glslang.
 
-declare -r EXE='../build/install/bin/glslangValidator'
+declare -r EXE='../build/install/bin/glslang'
 
 # search common locations for spirv-tools: keep first one
 for toolsdir in '../External/spirv-tools/build/tools' '../../SPIRV-Tools/build/tools/bin' '/usr/local/bin'; do
diff --git a/Test/web.runtests b/Test/web.runtests
index 3283dd8..584b6c5 100755
--- a/Test/web.runtests
+++ b/Test/web.runtests
@@ -3,7 +3,7 @@
 TESTLIST=web.testlist
 TARGETDIR=localResults
 BASEDIR=baseResults
-EXE=../build/install/bin/glslangValidator.exe
+EXE=../build/install/bin/glslang.exe
 HASERROR=0
 mkdir -p $TARGETDIR
 
diff --git a/gen_extension_headers.py b/gen_extension_headers.py
index 2838c96..0638720 100755
--- a/gen_extension_headers.py
+++ b/gen_extension_headers.py
@@ -57,7 +57,7 @@
         contents += '\tfor (int i = 0; i < n; i++) {\n'
 
         for symbol_name in symbol_name_list:

-            contents += '\t\tif (strstr(shaders[i], "%s") != NULL) {\n'   % (symbol_name)
+            contents += '\t\tif (strstr(shaders[i], "%s") != nullptr) {\n'   % (symbol_name)
             contents += '\t\t    shaderString.append(%s_GLSL);\n' % (symbol_name)
             contents += '\t\t}\n'

 
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
index 1bb4000..870698f 100644
--- a/glslang/CInterface/glslang_c_interface.cpp
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -33,7 +33,7 @@
 #include "glslang/Include/glslang_c_interface.h"
 
 #include "StandAlone/DirStackFileIncluder.h"
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
 #include "glslang/Include/ShHandle.h"
 
 #include "glslang/Include/ResourceLimits.h"
@@ -81,25 +81,6 @@
 */
 class CallbackIncluder : public glslang::TShader::Includer {
 public:
-    /* Wrapper of IncludeResult which stores a glsl_include_result object internally */
-    class CallbackIncludeResult : public glslang::TShader::Includer::IncludeResult {
-    public:
-        CallbackIncludeResult(const std::string& headerName, const char* const headerData, const size_t headerLength,
-                              void* userData, glsl_include_result_t* includeResult)
-            : glslang::TShader::Includer::IncludeResult(headerName, headerData, headerLength, userData),
-              includeResult(includeResult)
-        {
-        }
-
-        virtual ~CallbackIncludeResult() {}
-
-    protected:
-        friend class CallbackIncluder;
-
-        glsl_include_result_t* includeResult;
-    };
-
-public:
     CallbackIncluder(glsl_include_callbacks_t _callbacks, void* _context) : callbacks(_callbacks), context(_context) {}
 
     virtual ~CallbackIncluder() {}
@@ -110,9 +91,7 @@
         if (this->callbacks.include_system) {
             glsl_include_result_t* result =
                 this->callbacks.include_system(this->context, headerName, includerName, inclusionDepth);
-
-            return new CallbackIncludeResult(std::string(headerName), result->header_data, result->header_length,
-                                             nullptr, result);
+            return makeIncludeResult(result);
         }
 
         return glslang::TShader::Includer::includeSystem(headerName, includerName, inclusionDepth);
@@ -124,9 +103,7 @@
         if (this->callbacks.include_local) {
             glsl_include_result_t* result =
                 this->callbacks.include_local(this->context, headerName, includerName, inclusionDepth);
-
-            return new CallbackIncludeResult(std::string(headerName), result->header_data, result->header_length,
-                                             nullptr, result);
+            return makeIncludeResult(result);
         }
 
         return glslang::TShader::Includer::includeLocal(headerName, includerName, inclusionDepth);
@@ -139,22 +116,25 @@
         if (result == nullptr)
             return;
 
-        if (this->callbacks.free_include_result && (result->userData == nullptr)) {
-            CallbackIncludeResult* innerResult = static_cast<CallbackIncludeResult*>(result);
-            /* use internal free() function */
-            this->callbacks.free_include_result(this->context, innerResult->includeResult);
-            /* ignore internal fields of TShader::Includer::IncludeResult */
-            delete result;
-            return;
+        if (this->callbacks.free_include_result) {
+            this->callbacks.free_include_result(this->context, static_cast<glsl_include_result_t*>(result->userData));
         }
 
-        delete[] static_cast<char*>(result->userData);
         delete result;
     }
 
 private:
     CallbackIncluder() {}
 
+    IncludeResult* makeIncludeResult(glsl_include_result_t* result) {
+        if (!result) {
+            return nullptr;
+        }
+
+        return new glslang::TShader::Includer::IncludeResult(
+            std::string(result->header_name), result->header_data, result->header_length, result);
+    }
+
     /* C callback pointers */
     glsl_include_callbacks_t callbacks;
     /* User-defined context */
@@ -394,8 +374,11 @@
 
 GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
 {
-    DirStackFileIncluder Includer;
-    /* TODO: use custom callbacks if they are available in 'i->callbacks' */
+    DirStackFileIncluder dirStackFileIncluder;
+    CallbackIncluder callbackIncluder(input->callbacks, input->callbacks_ctx);
+    glslang::TShader::Includer& Includer = (input->callbacks.include_local||input->callbacks.include_system)
+        ? static_cast<glslang::TShader::Includer&>(callbackIncluder)
+        : static_cast<glslang::TShader::Includer&>(dirStackFileIncluder);
     return shader->shader->preprocess(
         reinterpret_cast<const TBuiltInResource*>(input->resource),
         input->default_version,
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 72e82b4..f9ba5eb 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -33,7 +33,7 @@
 
 if(WIN32)
     add_subdirectory(OSDependent/Windows)
-elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia")
+elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia" OR ANDROID)
     add_subdirectory(OSDependent/Unix)
 else()
     message("unknown platform")
@@ -184,6 +184,30 @@
 endif()
 
 ################################################################################
+# ResourceLimits
+################################################################################
+set(RESOURCELIMITS_SOURCES
+    ResourceLimits/ResourceLimits.cpp
+    ResourceLimits/resource_limits_c.cpp
+)
+
+set(RESOURCELIMITS_HEADERS
+  Public/ResourceLimits.h
+  Public/resource_limits_c.h
+)
+
+add_library(glslang-default-resource-limits STATIC ${RESOURCELIMITS_SOURCES} ${RESOURCELIMITS_HEADERS})
+set_target_properties(glslang-default-resource-limits PROPERTIES
+    VERSION "${GLSLANG_VERSION}"
+    SOVERSION "${GLSLANG_VERSION_MAJOR}"
+    FOLDER glslang
+    POSITION_INDEPENDENT_CODE ON)
+
+target_include_directories(glslang-default-resource-limits PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
+    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+
+################################################################################
 # source_groups
 ################################################################################
 if(WIN32)
@@ -210,7 +234,7 @@
             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\")
+                include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
             endif()
 
             if(${BUILD_SHARED_LIBS})
@@ -226,7 +250,8 @@
 
     set(ALL_HEADERS
         ${GLSLANG_HEADERS}
-        ${MACHINEINDEPENDENT_HEADERS})
+        ${MACHINEINDEPENDENT_HEADERS}
+        ${RESOURCELIMITS_HEADERS})
 
     foreach(file ${ALL_HEADERS})
         get_filename_component(dir ${file} DIRECTORY)
@@ -235,4 +260,18 @@
 
     install(FILES ${GLSLANG_BUILD_INFO_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang)
 
+    install(TARGETS glslang-default-resource-limits EXPORT glslang-targets)
+
+    # Backward compatibility
+    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" "
+        message(WARNING \"Using `glslang-default-resource-limitsTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
+
+        if (NOT TARGET glslang::glslang-default-resource-limits)
+            include(\"\${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
+        endif()
+
+        add_library(glslang-default-resource-limits ALIAS glslang::glslang-default-resource-limits)
+    ")
+    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+
 endif()
diff --git a/glslang/GenericCodeGen/Link.cpp b/glslang/GenericCodeGen/Link.cpp
index c38db0f..5e28405 100644
--- a/glslang/GenericCodeGen/Link.cpp
+++ b/glslang/GenericCodeGen/Link.cpp
@@ -82,7 +82,7 @@
 
 TShHandleBase* ConstructBindings()
 {
-    return 0;
+    return nullptr;
 }
 
 void DeleteBindingList(TShHandleBase* bindingList)
diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp
index a01f240..11c0e45 100644
--- a/glslang/HLSL/hlslGrammar.cpp
+++ b/glslang/HLSL/hlslGrammar.cpp
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2016-2018 Google, Inc.
 // Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2023 Mobica Limited.
 //
 // All rights reserved.
 //
@@ -594,6 +595,7 @@
 // fully_specified_type
 //      : type_specifier
 //      | type_qualifier type_specifier
+//      | type_specifier type_qualifier
 //
 bool HlslGrammar::acceptFullySpecifiedType(TType& type, const TAttributes& attributes)
 {
@@ -605,7 +607,7 @@
     // type_qualifier
     TQualifier qualifier;
     qualifier.clear();
-    if (! acceptQualifier(qualifier))
+    if (! acceptPreQualifier(qualifier))
         return false;
     TSourceLoc loc = token.loc;
 
@@ -620,6 +622,10 @@
         return false;
     }
 
+    // type_qualifier
+    if (! acceptPostQualifier(qualifier))
+       return false;
+
     if (type.getBasicType() == EbtBlock) {
         // the type was a block, which set some parts of the qualifier
         parseContext.mergeQualifiers(type.getQualifier(), qualifier);
@@ -634,7 +640,7 @@
             parseContext.declareBlock(loc, type);
     } else {
         // Some qualifiers are set when parsing the type.  Merge those with
-        // whatever comes from acceptQualifier.
+        // whatever comes from acceptPreQualifier and acceptPostQualifier.
         assert(qualifier.layoutFormat == ElfNone);
 
         qualifier.layoutFormat = type.getQualifier().layoutFormat;
@@ -660,7 +666,7 @@
 //
 // Zero or more of these, so this can't return false.
 //
-bool HlslGrammar::acceptQualifier(TQualifier& qualifier)
+bool HlslGrammar::acceptPreQualifier(TQualifier& qualifier)
 {
     do {
         switch (peek()) {
@@ -766,6 +772,25 @@
     } while (true);
 }
 
+// type_qualifier
+//      : qualifier qualifier ...
+//
+// Zero or more of these, so this can't return false.
+//
+bool HlslGrammar::acceptPostQualifier(TQualifier& qualifier)
+{
+    do {
+        switch (peek()) {
+        case EHTokConst:
+            qualifier.storage = EvqConst;
+            break;
+        default:
+            return true;
+        }
+        advanceToken();
+    } while (true);
+}
+
 // layout_qualifier_list
 //      : LAYOUT LEFT_PAREN layout_qualifier COMMA layout_qualifier ... RIGHT_PAREN
 //
@@ -823,8 +848,10 @@
 //      | UINT
 //      | BOOL
 //
-bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType)
+bool HlslGrammar::acceptTemplateVecMatBasicType(TBasicType& basicType,
+                                                TPrecisionQualifier& precision)
 {
+    precision = EpqNone;
     switch (peek()) {
     case EHTokFloat:
         basicType = EbtFloat;
@@ -842,6 +869,23 @@
     case EHTokBool:
         basicType = EbtBool;
         break;
+    case EHTokHalf:
+        basicType = parseContext.hlslEnable16BitTypes() ? EbtFloat16 : EbtFloat;
+        break;
+    case EHTokMin16float:
+    case EHTokMin10float:
+        basicType = parseContext.hlslEnable16BitTypes() ? EbtFloat16 : EbtFloat;
+        precision = EpqMedium;
+        break;
+    case EHTokMin16int:
+    case EHTokMin12int:
+        basicType = parseContext.hlslEnable16BitTypes() ? EbtInt16 : EbtInt;
+        precision = EpqMedium;
+        break;
+    case EHTokMin16uint:
+        basicType = parseContext.hlslEnable16BitTypes() ? EbtUint16 : EbtUint;
+        precision = EpqMedium;
+        break;
     default:
         return false;
     }
@@ -867,7 +911,8 @@
     }
 
     TBasicType basicType;
-    if (! acceptTemplateVecMatBasicType(basicType)) {
+    TPrecisionQualifier precision;
+    if (! acceptTemplateVecMatBasicType(basicType, precision)) {
         expected("scalar type");
         return false;
     }
@@ -890,7 +935,7 @@
 
     const int vecSizeI = vecSize->getAsConstantUnion()->getConstArray()[0].getIConst();
 
-    new(&type) TType(basicType, EvqTemporary, vecSizeI);
+    new(&type) TType(basicType, EvqTemporary, precision, vecSizeI);
 
     if (vecSizeI == 1)
         type.makeVector();
@@ -919,7 +964,8 @@
     }
 
     TBasicType basicType;
-    if (! acceptTemplateVecMatBasicType(basicType)) {
+    TPrecisionQualifier precision;
+    if (! acceptTemplateVecMatBasicType(basicType, precision)) {
         expected("scalar type");
         return false;
     }
@@ -956,7 +1002,7 @@
     if (! acceptLiteral(cols))
         return false;
 
-    new(&type) TType(basicType, EvqTemporary, 0,
+    new(&type) TType(basicType, EvqTemporary, precision, 0,
                      rows->getAsConstantUnion()->getConstArray()[0].getIConst(),
                      cols->getAsConstantUnion()->getConstArray()[0].getIConst());
 
@@ -2064,6 +2110,251 @@
         new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 4);
         break;
 
+    case EHTokMin16float1x1:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
+        break;
+    case EHTokMin16float1x2:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
+        break;
+    case EHTokMin16float1x3:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
+        break;
+    case EHTokMin16float1x4:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
+        break;
+    case EHTokMin16float2x1:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
+        break;
+    case EHTokMin16float2x2:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
+        break;
+    case EHTokMin16float2x3:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
+        break;
+    case EHTokMin16float2x4:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
+        break;
+    case EHTokMin16float3x1:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
+        break;
+    case EHTokMin16float3x2:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
+        break;
+    case EHTokMin16float3x3:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
+        break;
+    case EHTokMin16float3x4:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
+        break;
+    case EHTokMin16float4x1:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
+        break;
+    case EHTokMin16float4x2:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
+        break;
+    case EHTokMin16float4x3:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
+        break;
+    case EHTokMin16float4x4:
+        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
+        break;
+
+    case EHTokMin10float1x1:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
+        break;
+    case EHTokMin10float1x2:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
+        break;
+    case EHTokMin10float1x3:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
+        break;
+    case EHTokMin10float1x4:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
+        break;
+    case EHTokMin10float2x1:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
+        break;
+    case EHTokMin10float2x2:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
+        break;
+    case EHTokMin10float2x3:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
+        break;
+    case EHTokMin10float2x4:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
+        break;
+    case EHTokMin10float3x1:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
+        break;
+    case EHTokMin10float3x2:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
+        break;
+    case EHTokMin10float3x3:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
+        break;
+    case EHTokMin10float3x4:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
+        break;
+    case EHTokMin10float4x1:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
+        break;
+    case EHTokMin10float4x2:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
+        break;
+    case EHTokMin10float4x3:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
+        break;
+    case EHTokMin10float4x4:
+        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
+        break;
+
+    case EHTokMin16int1x1:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
+        break;
+    case EHTokMin16int1x2:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
+        break;
+    case EHTokMin16int1x3:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
+        break;
+    case EHTokMin16int1x4:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
+        break;
+    case EHTokMin16int2x1:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
+        break;
+    case EHTokMin16int2x2:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
+        break;
+    case EHTokMin16int2x3:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
+        break;
+    case EHTokMin16int2x4:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
+        break;
+    case EHTokMin16int3x1:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
+        break;
+    case EHTokMin16int3x2:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
+        break;
+    case EHTokMin16int3x3:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
+        break;
+    case EHTokMin16int3x4:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
+        break;
+    case EHTokMin16int4x1:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
+        break;
+    case EHTokMin16int4x2:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
+        break;
+    case EHTokMin16int4x3:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
+        break;
+    case EHTokMin16int4x4:
+        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
+        break;
+
+    case EHTokMin12int1x1:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
+        break;
+    case EHTokMin12int1x2:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
+        break;
+    case EHTokMin12int1x3:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
+        break;
+    case EHTokMin12int1x4:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
+        break;
+    case EHTokMin12int2x1:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
+        break;
+    case EHTokMin12int2x2:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
+        break;
+    case EHTokMin12int2x3:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
+        break;
+    case EHTokMin12int2x4:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
+        break;
+    case EHTokMin12int3x1:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
+        break;
+    case EHTokMin12int3x2:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
+        break;
+    case EHTokMin12int3x3:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
+        break;
+    case EHTokMin12int3x4:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
+        break;
+    case EHTokMin12int4x1:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
+        break;
+    case EHTokMin12int4x2:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
+        break;
+    case EHTokMin12int4x3:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
+        break;
+    case EHTokMin12int4x4:
+        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
+        break;
+
+    case EHTokMin16uint1x1:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 1);
+        break;
+    case EHTokMin16uint1x2:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 2);
+        break;
+    case EHTokMin16uint1x3:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 3);
+        break;
+    case EHTokMin16uint1x4:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 4);
+        break;
+    case EHTokMin16uint2x1:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 1);
+        break;
+    case EHTokMin16uint2x2:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 2);
+        break;
+    case EHTokMin16uint2x3:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 3);
+        break;
+    case EHTokMin16uint2x4:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 4);
+        break;
+    case EHTokMin16uint3x1:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 1);
+        break;
+    case EHTokMin16uint3x2:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 2);
+        break;
+    case EHTokMin16uint3x3:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 3);
+        break;
+    case EHTokMin16uint3x4:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 4);
+        break;
+    case EHTokMin16uint4x1:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 1);
+        break;
+    case EHTokMin16uint4x2:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 2);
+        break;
+    case EHTokMin16uint4x3:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 3);
+        break;
+    case EHTokMin16uint4x4:
+        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 4);
+        break;
+
     default:
         return false;
     }
@@ -3794,7 +4085,7 @@
         parseContext.unnestLooping();
         --parseContext.controlFlowNestingLevel;
 
-        loopNode = intermediate.addLoop(statement, condition, 0, false, loc);
+        loopNode = intermediate.addLoop(statement, condition, nullptr, false, loc);
         statement = loopNode;
         break;
 
diff --git a/glslang/HLSL/hlslGrammar.h b/glslang/HLSL/hlslGrammar.h
index 27706b2..cfe294b 100644
--- a/glslang/HLSL/hlslGrammar.h
+++ b/glslang/HLSL/hlslGrammar.h
@@ -1,6 +1,7 @@
 //
 // Copyright (C) 2016-2018 Google, Inc.
 // Copyright (C) 2016 LunarG, Inc.
+// Copyright (C) 2023 Mobica Limited.
 //
 // All rights reserved.
 //
@@ -72,11 +73,12 @@
         bool acceptSamplerState();
         bool acceptFullySpecifiedType(TType&, const TAttributes&);
         bool acceptFullySpecifiedType(TType&, TIntermNode*& nodeList, const TAttributes&, bool forbidDeclarators = false);
-        bool acceptQualifier(TQualifier&);
+        bool acceptPreQualifier(TQualifier&);
+        bool acceptPostQualifier(TQualifier&);
         bool acceptLayoutQualifierList(TQualifier&);
         bool acceptType(TType&);
         bool acceptType(TType&, TIntermNode*& nodeList);
-        bool acceptTemplateVecMatBasicType(TBasicType&);
+        bool acceptTemplateVecMatBasicType(TBasicType&, TPrecisionQualifier&);
         bool acceptVectorTemplateType(TType&);
         bool acceptMatrixTemplateType(TType&);
         bool acceptTessellationDeclType(TBuiltInVariable&);
diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp
index 62e46a0..ac0dee5 100644
--- a/glslang/HLSL/hlslParseHelper.cpp
+++ b/glslang/HLSL/hlslParseHelper.cpp
@@ -1177,10 +1177,13 @@
     if (type.isBuiltIn() && !type.isStruct())
         return;
 
+
     auto entry = flattenMap.insert(std::make_pair(variable.getUniqueId(),
                                                   TFlattenData(type.getQualifier().layoutBinding,
                                                                type.getQualifier().layoutLocation)));
 
+    if (type.isStruct() && type.getStruct()->size()==0)
+        return;
     // if flattening arrayed io struct, array each member of dereferenced type
     if (arrayed) {
         const TType dereferencedType(type, 0);
@@ -1596,7 +1599,7 @@
     //
     bool builtIn;
     TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn);
-    const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0;
+    const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
 
     if (prototype) {
         // All built-in functions are defined, even though they don't have a body.
@@ -2472,7 +2475,7 @@
 void HlslParseContext::handleFunctionArgument(TFunction* function,
                                               TIntermTyped*& arguments, TIntermTyped* newArg)
 {
-    TParameter param = { 0, new TType, nullptr };
+    TParameter param = { nullptr, new TType, nullptr };
     param.type->shallowCopy(newArg->getType());
 
     function->addParameter(param);
@@ -7565,7 +7568,6 @@
          candidateList[0]->getBuiltInOp() == EOpMethodRestartStrip ||
          candidateList[0]->getBuiltInOp() == EOpMethodIncrementCounter ||
          candidateList[0]->getBuiltInOp() == EOpMethodDecrementCounter ||
-         candidateList[0]->getBuiltInOp() == EOpMethodAppend ||
          candidateList[0]->getBuiltInOp() == EOpMethodConsume)) {
         return candidateList[0];
     }
@@ -7790,18 +7792,18 @@
             // Handle aggregates: put all args into the new function call
             for (int arg = 0; arg < int(args->getAsAggregate()->getSequence().size()); ++arg) {
                 // TODO: But for constness, we could avoid the new & shallowCopy, and use the pointer directly.
-                TParameter param = { 0, new TType, nullptr };
+                TParameter param = { nullptr, new TType, nullptr };
                 param.type->shallowCopy(args->getAsAggregate()->getSequence()[arg]->getAsTyped()->getType());
                 convertedCall.addParameter(param);
             }
         } else if (args->getAsUnaryNode()) {
             // Handle unaries: put all args into the new function call
-            TParameter param = { 0, new TType, nullptr };
+            TParameter param = { nullptr, new TType, nullptr };
             param.type->shallowCopy(args->getAsUnaryNode()->getOperand()->getAsTyped()->getType());
             convertedCall.addParameter(param);
         } else if (args->getAsTyped()) {
             // Handle bare e.g, floats, not in an aggregate.
-            TParameter param = { 0, new TType, nullptr };
+            TParameter param = { nullptr, new TType, nullptr };
             param.type->shallowCopy(args->getAsTyped()->getType());
             convertedCall.addParameter(param);
         } else {
@@ -9046,7 +9048,8 @@
             // "The specified offset must be a multiple
             // of the base alignment of the type of the block member it qualifies, or a compile-time error results."
             if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment))
-                error(memberLoc, "must be a multiple of the member's alignment", "offset", "");
+                error(memberLoc, "must be a multiple of the member's alignment", "offset",
+                    "(layout offset = %d | member alignment = %d)", memberQualifier.layoutOffset, memberAlignment);
 
             // "The offset qualifier forces the qualified member to start at or after the specified
             // integral-constant expression, which will be its byte offset from the beginning of the buffer.
diff --git a/glslang/HLSL/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h
index 96d85f4..97c52d4 100644
--- a/glslang/HLSL/hlslParseHelper.h
+++ b/glslang/HLSL/hlslParseHelper.h
@@ -147,14 +147,14 @@
     void declareTypedef(const TSourceLoc&, const TString& identifier, const TType&);
     void declareStruct(const TSourceLoc&, TString& structName, TType&);
     TSymbol* lookupUserType(const TString&, TType&);
-    TIntermNode* declareVariable(const TSourceLoc&, const TString& identifier, TType&, TIntermTyped* initializer = 0);
+    TIntermNode* declareVariable(const TSourceLoc&, const TString& identifier, TType&, TIntermTyped* initializer = nullptr);
     void lengthenList(const TSourceLoc&, TIntermSequence& list, int size, TIntermTyped* scalarInit);
     TIntermTyped* handleConstructor(const TSourceLoc&, TIntermTyped*, const TType&);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermTyped*, const TType&);
     TIntermTyped* convertArray(TIntermTyped*, const TType&);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
     TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
-    void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = 0);
+    void declareBlock(const TSourceLoc&, TType&, const TString* instanceName = nullptr);
     void declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name);
     void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation);
     void fixXfbOffsets(TQualifier&, TTypeList&);
@@ -171,10 +171,10 @@
     void unnestAnnotations() { --annotationNestingLevel; }
     int getAnnotationNestingLevel() { return annotationNestingLevel; }
     void pushScope()         { symbolTable.push(); }
-    void popScope()          { symbolTable.pop(0); }
+    void popScope()          { symbolTable.pop(nullptr); }
 
     void pushThisScope(const TType&, const TVector<TFunctionDeclarator>&);
-    void popThisScope()      { symbolTable.pop(0); }
+    void popThisScope()      { symbolTable.pop(nullptr); }
 
     void pushImplicitThis(TVariable* thisParameter) { implicitThisStack.push_back(thisParameter); }
     void popImplicitThis() { implicitThisStack.pop_back(); }
diff --git a/glslang/HLSL/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp
index 15918dc..8fb1d29 100644
--- a/glslang/HLSL/hlslParseables.cpp
+++ b/glslang/HLSL/hlslParseables.cpp
@@ -564,8 +564,8 @@
         { "GetRenderTargetSamplePosition",    "V2",    "F",       "V1",             "I",             EShLangAll,    false },
         { "GroupMemoryBarrier",               nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
         { "GroupMemoryBarrierWithGroupSync",  nullptr, nullptr,   "-",              "-",             EShLangCS,     false },
-        { "InterlockedAdd",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
-        { "InterlockedAdd",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
+        { "InterlockedAdd",                   "-",     "-",       "SVM,,>",         "FUI,,",          EShLangPSCS,   false },
+        { "InterlockedAdd",                   "-",     "-",       "SVM,",           "FUI,",           EShLangPSCS,   false },
         { "InterlockedAnd",                   "-",     "-",       "SVM,,>",         "UI,,",          EShLangPSCS,   false },
         { "InterlockedAnd",                   "-",     "-",       "SVM,",           "UI,",           EShLangPSCS,   false },
         { "InterlockedCompareExchange",       "-",     "-",       "SVM,,,>",        "UI,,,",         EShLangPSCS,   false },
diff --git a/glslang/HLSL/hlslScanContext.cpp b/glslang/HLSL/hlslScanContext.cpp
index fc62672..823b17a 100644
--- a/glslang/HLSL/hlslScanContext.cpp
+++ b/glslang/HLSL/hlslScanContext.cpp
@@ -312,6 +312,86 @@
     (*KeywordMap)["double4x2"] =               EHTokDouble4x2;
     (*KeywordMap)["double4x3"] =               EHTokDouble4x3;
     (*KeywordMap)["double4x4"] =               EHTokDouble4x4;
+    (*KeywordMap)["min16float1x1"] =           EHTokMin16float1x1;
+    (*KeywordMap)["min16float1x2"] =           EHTokMin16float1x2;
+    (*KeywordMap)["min16float1x3"] =           EHTokMin16float1x3;
+    (*KeywordMap)["min16float1x4"] =           EHTokMin16float1x4;
+    (*KeywordMap)["min16float2x1"] =           EHTokMin16float2x1;
+    (*KeywordMap)["min16float2x2"] =           EHTokMin16float2x2;
+    (*KeywordMap)["min16float2x3"] =           EHTokMin16float2x3;
+    (*KeywordMap)["min16float2x4"] =           EHTokMin16float2x4;
+    (*KeywordMap)["min16float3x1"] =           EHTokMin16float3x1;
+    (*KeywordMap)["min16float3x2"] =           EHTokMin16float3x2;
+    (*KeywordMap)["min16float3x3"] =           EHTokMin16float3x3;
+    (*KeywordMap)["min16float3x4"] =           EHTokMin16float3x4;
+    (*KeywordMap)["min16float4x1"] =           EHTokMin16float4x1;
+    (*KeywordMap)["min16float4x2"] =           EHTokMin16float4x2;
+    (*KeywordMap)["min16float4x3"] =           EHTokMin16float4x3;
+    (*KeywordMap)["min16float4x4"] =           EHTokMin16float4x4;
+    (*KeywordMap)["min10float1x1"] =           EHTokMin10float1x1;
+    (*KeywordMap)["min10float1x2"] =           EHTokMin10float1x2;
+    (*KeywordMap)["min10float1x3"] =           EHTokMin10float1x3;
+    (*KeywordMap)["min10float1x4"] =           EHTokMin10float1x4;
+    (*KeywordMap)["min10float2x1"] =           EHTokMin10float2x1;
+    (*KeywordMap)["min10float2x2"] =           EHTokMin10float2x2;
+    (*KeywordMap)["min10float2x3"] =           EHTokMin10float2x3;
+    (*KeywordMap)["min10float2x4"] =           EHTokMin10float2x4;
+    (*KeywordMap)["min10float3x1"] =           EHTokMin10float3x1;
+    (*KeywordMap)["min10float3x2"] =           EHTokMin10float3x2;
+    (*KeywordMap)["min10float3x3"] =           EHTokMin10float3x3;
+    (*KeywordMap)["min10float3x4"] =           EHTokMin10float3x4;
+    (*KeywordMap)["min10float4x1"] =           EHTokMin10float4x1;
+    (*KeywordMap)["min10float4x2"] =           EHTokMin10float4x2;
+    (*KeywordMap)["min10float4x3"] =           EHTokMin10float4x3;
+    (*KeywordMap)["min10float4x4"] =           EHTokMin10float4x4;
+    (*KeywordMap)["min16int1x1"] =             EHTokMin16int1x1;
+    (*KeywordMap)["min16int1x2"] =             EHTokMin16int1x2;
+    (*KeywordMap)["min16int1x3"] =             EHTokMin16int1x3;
+    (*KeywordMap)["min16int1x4"] =             EHTokMin16int1x4;
+    (*KeywordMap)["min16int2x1"] =             EHTokMin16int2x1;
+    (*KeywordMap)["min16int2x2"] =             EHTokMin16int2x2;
+    (*KeywordMap)["min16int2x3"] =             EHTokMin16int2x3;
+    (*KeywordMap)["min16int2x4"] =             EHTokMin16int2x4;
+    (*KeywordMap)["min16int3x1"] =             EHTokMin16int3x1;
+    (*KeywordMap)["min16int3x2"] =             EHTokMin16int3x2;
+    (*KeywordMap)["min16int3x3"] =             EHTokMin16int3x3;
+    (*KeywordMap)["min16int3x4"] =             EHTokMin16int3x4;
+    (*KeywordMap)["min16int4x1"] =             EHTokMin16int4x1;
+    (*KeywordMap)["min16int4x2"] =             EHTokMin16int4x2;
+    (*KeywordMap)["min16int4x3"] =             EHTokMin16int4x3;
+    (*KeywordMap)["min16int4x4"] =             EHTokMin16int4x4;
+    (*KeywordMap)["min12int1x1"] =             EHTokMin12int1x1;
+    (*KeywordMap)["min12int1x2"] =             EHTokMin12int1x2;
+    (*KeywordMap)["min12int1x3"] =             EHTokMin12int1x3;
+    (*KeywordMap)["min12int1x4"] =             EHTokMin12int1x4;
+    (*KeywordMap)["min12int2x1"] =             EHTokMin12int2x1;
+    (*KeywordMap)["min12int2x2"] =             EHTokMin12int2x2;
+    (*KeywordMap)["min12int2x3"] =             EHTokMin12int2x3;
+    (*KeywordMap)["min12int2x4"] =             EHTokMin12int2x4;
+    (*KeywordMap)["min12int3x1"] =             EHTokMin12int3x1;
+    (*KeywordMap)["min12int3x2"] =             EHTokMin12int3x2;
+    (*KeywordMap)["min12int3x3"] =             EHTokMin12int3x3;
+    (*KeywordMap)["min12int3x4"] =             EHTokMin12int3x4;
+    (*KeywordMap)["min12int4x1"] =             EHTokMin12int4x1;
+    (*KeywordMap)["min12int4x2"] =             EHTokMin12int4x2;
+    (*KeywordMap)["min12int4x3"] =             EHTokMin12int4x3;
+    (*KeywordMap)["min12int4x4"] =             EHTokMin12int4x4;
+    (*KeywordMap)["min16uint1x1"] =            EHTokMin16uint1x1;
+    (*KeywordMap)["min16uint1x2"] =            EHTokMin16uint1x2;
+    (*KeywordMap)["min16uint1x3"] =            EHTokMin16uint1x3;
+    (*KeywordMap)["min16uint1x4"] =            EHTokMin16uint1x4;
+    (*KeywordMap)["min16uint2x1"] =            EHTokMin16uint2x1;
+    (*KeywordMap)["min16uint2x2"] =            EHTokMin16uint2x2;
+    (*KeywordMap)["min16uint2x3"] =            EHTokMin16uint2x3;
+    (*KeywordMap)["min16uint2x4"] =            EHTokMin16uint2x4;
+    (*KeywordMap)["min16uint3x1"] =            EHTokMin16uint3x1;
+    (*KeywordMap)["min16uint3x2"] =            EHTokMin16uint3x2;
+    (*KeywordMap)["min16uint3x3"] =            EHTokMin16uint3x3;
+    (*KeywordMap)["min16uint3x4"] =            EHTokMin16uint3x4;
+    (*KeywordMap)["min16uint4x1"] =            EHTokMin16uint4x1;
+    (*KeywordMap)["min16uint4x2"] =            EHTokMin16uint4x2;
+    (*KeywordMap)["min16uint4x3"] =            EHTokMin16uint4x3;
+    (*KeywordMap)["min16uint4x4"] =            EHTokMin16uint4x4;
 
     (*KeywordMap)["sampler"] =                 EHTokSampler;
     (*KeywordMap)["sampler1D"] =               EHTokSampler1d;
@@ -806,6 +886,86 @@
     case EHTokDouble4x2:
     case EHTokDouble4x3:
     case EHTokDouble4x4:
+    case EHTokMin16float1x1:
+    case EHTokMin16float1x2:
+    case EHTokMin16float1x3:
+    case EHTokMin16float1x4:
+    case EHTokMin16float2x1:
+    case EHTokMin16float2x2:
+    case EHTokMin16float2x3:
+    case EHTokMin16float2x4:
+    case EHTokMin16float3x1:
+    case EHTokMin16float3x2:
+    case EHTokMin16float3x3:
+    case EHTokMin16float3x4:
+    case EHTokMin16float4x1:
+    case EHTokMin16float4x2:
+    case EHTokMin16float4x3:
+    case EHTokMin16float4x4:
+    case EHTokMin10float1x1:
+    case EHTokMin10float1x2:
+    case EHTokMin10float1x3:
+    case EHTokMin10float1x4:
+    case EHTokMin10float2x1:
+    case EHTokMin10float2x2:
+    case EHTokMin10float2x3:
+    case EHTokMin10float2x4:
+    case EHTokMin10float3x1:
+    case EHTokMin10float3x2:
+    case EHTokMin10float3x3:
+    case EHTokMin10float3x4:
+    case EHTokMin10float4x1:
+    case EHTokMin10float4x2:
+    case EHTokMin10float4x3:
+    case EHTokMin10float4x4:
+    case EHTokMin16int1x1:
+    case EHTokMin16int1x2:
+    case EHTokMin16int1x3:
+    case EHTokMin16int1x4:
+    case EHTokMin16int2x1:
+    case EHTokMin16int2x2:
+    case EHTokMin16int2x3:
+    case EHTokMin16int2x4:
+    case EHTokMin16int3x1:
+    case EHTokMin16int3x2:
+    case EHTokMin16int3x3:
+    case EHTokMin16int3x4:
+    case EHTokMin16int4x1:
+    case EHTokMin16int4x2:
+    case EHTokMin16int4x3:
+    case EHTokMin16int4x4:
+    case EHTokMin12int1x1:
+    case EHTokMin12int1x2:
+    case EHTokMin12int1x3:
+    case EHTokMin12int1x4:
+    case EHTokMin12int2x1:
+    case EHTokMin12int2x2:
+    case EHTokMin12int2x3:
+    case EHTokMin12int2x4:
+    case EHTokMin12int3x1:
+    case EHTokMin12int3x2:
+    case EHTokMin12int3x3:
+    case EHTokMin12int3x4:
+    case EHTokMin12int4x1:
+    case EHTokMin12int4x2:
+    case EHTokMin12int4x3:
+    case EHTokMin12int4x4:
+    case EHTokMin16uint1x1:
+    case EHTokMin16uint1x2:
+    case EHTokMin16uint1x3:
+    case EHTokMin16uint1x4:
+    case EHTokMin16uint2x1:
+    case EHTokMin16uint2x2:
+    case EHTokMin16uint2x3:
+    case EHTokMin16uint2x4:
+    case EHTokMin16uint3x1:
+    case EHTokMin16uint3x2:
+    case EHTokMin16uint3x3:
+    case EHTokMin16uint3x4:
+    case EHTokMin16uint4x1:
+    case EHTokMin16uint4x2:
+    case EHTokMin16uint4x3:
+    case EHTokMin16uint4x4:
         return keyword;
 
     // texturing types
diff --git a/glslang/HLSL/hlslTokens.h b/glslang/HLSL/hlslTokens.h
index 4426bcc..a7c1299 100644
--- a/glslang/HLSL/hlslTokens.h
+++ b/glslang/HLSL/hlslTokens.h
@@ -249,6 +249,86 @@
     EHTokDouble4x2,
     EHTokDouble4x3,
     EHTokDouble4x4,
+    EHTokMin16float1x1,
+    EHTokMin16float1x2,
+    EHTokMin16float1x3,
+    EHTokMin16float1x4,
+    EHTokMin16float2x1,
+    EHTokMin16float2x2,
+    EHTokMin16float2x3,
+    EHTokMin16float2x4,
+    EHTokMin16float3x1,
+    EHTokMin16float3x2,
+    EHTokMin16float3x3,
+    EHTokMin16float3x4,
+    EHTokMin16float4x1,
+    EHTokMin16float4x2,
+    EHTokMin16float4x3,
+    EHTokMin16float4x4,
+    EHTokMin10float1x1,
+    EHTokMin10float1x2,
+    EHTokMin10float1x3,
+    EHTokMin10float1x4,
+    EHTokMin10float2x1,
+    EHTokMin10float2x2,
+    EHTokMin10float2x3,
+    EHTokMin10float2x4,
+    EHTokMin10float3x1,
+    EHTokMin10float3x2,
+    EHTokMin10float3x3,
+    EHTokMin10float3x4,
+    EHTokMin10float4x1,
+    EHTokMin10float4x2,
+    EHTokMin10float4x3,
+    EHTokMin10float4x4,
+    EHTokMin16int1x1,
+    EHTokMin16int1x2,
+    EHTokMin16int1x3,
+    EHTokMin16int1x4,
+    EHTokMin16int2x1,
+    EHTokMin16int2x2,
+    EHTokMin16int2x3,
+    EHTokMin16int2x4,
+    EHTokMin16int3x1,
+    EHTokMin16int3x2,
+    EHTokMin16int3x3,
+    EHTokMin16int3x4,
+    EHTokMin16int4x1,
+    EHTokMin16int4x2,
+    EHTokMin16int4x3,
+    EHTokMin16int4x4,
+    EHTokMin12int1x1,
+    EHTokMin12int1x2,
+    EHTokMin12int1x3,
+    EHTokMin12int1x4,
+    EHTokMin12int2x1,
+    EHTokMin12int2x2,
+    EHTokMin12int2x3,
+    EHTokMin12int2x4,
+    EHTokMin12int3x1,
+    EHTokMin12int3x2,
+    EHTokMin12int3x3,
+    EHTokMin12int3x4,
+    EHTokMin12int4x1,
+    EHTokMin12int4x2,
+    EHTokMin12int4x3,
+    EHTokMin12int4x4,
+    EHTokMin16uint1x1,
+    EHTokMin16uint1x2,
+    EHTokMin16uint1x3,
+    EHTokMin16uint1x4,
+    EHTokMin16uint2x1,
+    EHTokMin16uint2x2,
+    EHTokMin16uint2x3,
+    EHTokMin16uint2x4,
+    EHTokMin16uint3x1,
+    EHTokMin16uint3x2,
+    EHTokMin16uint3x3,
+    EHTokMin16uint3x4,
+    EHTokMin16uint4x1,
+    EHTokMin16uint4x2,
+    EHTokMin16uint4x3,
+    EHTokMin16uint4x4,
 
     // texturing types
     EHTokSampler,
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
old mode 100644
new mode 100755
index 156d98b..f41941e
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -65,6 +65,7 @@
     EbtAccStruct,
     EbtReference,
     EbtRayQuery,
+    EbtHitObjectNV,
 #ifndef GLSLANG_WEB
     // SPIR-V type defined by spirv_type
     EbtSpirvType,
@@ -104,6 +105,7 @@
     EvqHitAttr,
     EvqCallableData,
     EvqCallableDataIn,
+    EvqHitObjectAttrNV,
 
     EvqtaskPayloadSharedEXT,
 
@@ -132,6 +134,8 @@
     EvqFragDepth,
     EvqFragStencil,
 
+    EvqTileImageEXT,
+
     // end of list
     EvqLast
 };
@@ -316,6 +320,15 @@
     EbvByteAddressBuffer,
     EbvRWByteAddressBuffer,
 
+    // ARM specific core builtins
+    EbvCoreCountARM,
+    EbvCoreIDARM,
+    EbvCoreMaxIDARM,
+    EbvWarpIDARM,
+    EbvWarpMaxIDARM,
+
+    EbvPositionFetch,
+
     EbvLast
 };
 
@@ -368,6 +381,7 @@
     case EvqCallableData:   return "callableDataNV";   break;
     case EvqCallableDataIn: return "callableDataInNV"; break;
     case EvqtaskPayloadSharedEXT: return "taskPayloadSharedEXT"; break;
+    case EvqHitObjectAttrNV:return "hitObjectAttributeNV"; break;
     default:                return "unknown qualifier";
     }
 }
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index a5b41cb..080b807 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -44,6 +44,7 @@
 #else
 #include <cmath>
 #endif
+#include <cstdint>
 #include <cstdio>
 #include <cstdlib>
 #include <list>
@@ -54,7 +55,7 @@
 #include <unordered_set>
 #include <vector>
 
-#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700)
+#if defined(__ANDROID__)
 #include <sstream>
 namespace std {
 template<typename T>
@@ -66,7 +67,7 @@
 }
 #endif
 
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API)
+#if defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API
     #include <basetsd.h>
     #ifndef snprintf
     #define snprintf sprintf_s
@@ -82,22 +83,6 @@
     #define UINT_PTR uintptr_t
 #endif
 
-#if defined(_MSC_VER) && _MSC_VER < 1800
-    #include <stdlib.h>
-    inline long long int strtoll (const char* str, char** endptr, int base)
-    {
-        return _strtoi64(str, endptr, base);
-    }
-    inline unsigned long long int strtoull (const char* str, char** endptr, int base)
-    {
-        return _strtoui64(str, endptr, base);
-    }
-    inline long long int atoll (const char* str)
-    {
-        return strtoll(str, NULL, 10);
-    }
-#endif
-
 #if defined(_MSC_VER)
 #define strdup _strdup
 #endif
diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h
index 1f5cac7..3e67d6e 100644
--- a/glslang/Include/PoolAlloc.h
+++ b/glslang/Include/PoolAlloc.h
@@ -37,7 +37,7 @@
 #ifndef _POOLALLOC_INCLUDED_
 #define _POOLALLOC_INCLUDED_
 
-#ifdef _DEBUG
+#ifndef NDEBUG
 #  define GUARD_BLOCKS  // define to enable guard block sanity checking
 #endif
 
@@ -74,7 +74,7 @@
 
 class TAllocation {
 public:
-    TAllocation(size_t size, unsigned char* mem, TAllocation* prev = 0) :
+    TAllocation(size_t size, unsigned char* mem, TAllocation* prev = nullptr) :
         size(size), mem(mem), prevAlloc(prev) {
         // Allocations are bracketed:
         //    [allocationHeader][initialGuardBlock][userData][finalGuardBlock]
@@ -171,7 +171,7 @@
     void popAll();
 
     //
-    // Call allocate() to actually acquire memory.  Returns 0 if no memory
+    // Call allocate() to actually acquire memory.  Returns nullptr if no memory
     // available, otherwise a properly aligned pointer to 'numBytes' of memory.
     //
     void* allocate(size_t numBytes);
@@ -189,7 +189,7 @@
     struct tHeader {
         tHeader(tHeader* nextPage, size_t pageCount) :
 #ifdef GUARD_BLOCKS
-        lastAllocation(0),
+        lastAllocation(nullptr),
 #endif
         nextPage(nextPage), pageCount(pageCount) { }
 
diff --git a/glslang/Include/ShHandle.h b/glslang/Include/ShHandle.h
index df07bd8..dee47c0 100644
--- a/glslang/Include/ShHandle.h
+++ b/glslang/Include/ShHandle.h
@@ -58,9 +58,9 @@
 public:
     TShHandleBase() { pool = new glslang::TPoolAllocator; }
     virtual ~TShHandleBase() { delete pool; }
-    virtual TCompiler* getAsCompiler() { return 0; }
-    virtual TLinker* getAsLinker() { return 0; }
-    virtual TUniformMap* getAsUniformMap() { return 0; }
+    virtual TCompiler* getAsCompiler() { return nullptr; }
+    virtual TLinker* getAsLinker() { return nullptr; }
+    virtual TUniformMap* getAsUniformMap() { return nullptr; }
     virtual glslang::TPoolAllocator* getPool() const { return pool; }
 private:
     glslang::TPoolAllocator* pool;
@@ -123,11 +123,11 @@
         infoSink(iSink),
         executable(e),
         haveReturnableObjectCode(false),
-        appAttributeBindings(0),
-        fixedAttributeBindings(0),
-        excludedAttributes(0),
+        appAttributeBindings(nullptr),
+        fixedAttributeBindings(nullptr),
+        excludedAttributes(nullptr),
         excludedCount(0),
-        uniformBindings(0) { }
+        uniformBindings(nullptr) { }
     virtual TLinker* getAsLinker() { return this; }
     virtual ~TLinker() { }
     virtual bool link(TCompilerList&, TUniformMap*) = 0;
@@ -137,7 +137,7 @@
     virtual void getAttributeBindings(ShBindingTable const **t) const = 0;
     virtual void setExcludedAttributes(const int* attributes, int count) { excludedAttributes = attributes; excludedCount = count; }
     virtual ShBindingTable* getUniformBindings() const  { return uniformBindings; }
-    virtual const void* getObjectCode() const { return 0; } // a real compiler would be returning object code here
+    virtual const void* getObjectCode() const { return nullptr; } // a real compiler would be returning object code here
     virtual TInfoSink& getInfoSink() { return infoSink; }
     TInfoSink& infoSink;
 protected:
diff --git a/glslang/Include/SpirvIntrinsics.h b/glslang/Include/SpirvIntrinsics.h
index 3c7d72c..d56c65d 100644
--- a/glslang/Include/SpirvIntrinsics.h
+++ b/glslang/Include/SpirvIntrinsics.h
@@ -98,12 +98,23 @@
 struct TSpirvTypeParameter {
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
 
-    TSpirvTypeParameter(const TIntermConstantUnion* arg) { constant = arg; }
+    TSpirvTypeParameter(const TIntermConstantUnion* arg)
+    {
+        constant = arg;
+        type = nullptr;
+    }
 
-    bool operator==(const TSpirvTypeParameter& rhs) const { return constant == rhs.constant; }
+    TSpirvTypeParameter(const TType *arg)
+    {
+        constant = nullptr;
+        type = arg;
+    }
+
+    bool operator==(const TSpirvTypeParameter& rhs) const;
     bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); }
 
-    const TIntermConstantUnion* constant;
+    const TIntermConstantUnion* constant; // Constant expression
+    const TType* type;                    // Type specifier
 };
 
 typedef TVector<TSpirvTypeParameter> TSpirvTypeParameters;
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index a6f47e8..6e3ad62 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -72,6 +72,7 @@
     EsdRect,
     EsdBuffer,
     EsdSubpass,  // goes only with non-sampled image (image is true)
+    EsdAttachmentEXT,
     EsdNumDims
 };
 
@@ -90,6 +91,7 @@
     bool isBuffer()      const { return false; }
     bool isRect()        const { return false; }
     bool isSubpass()     const { return false; }
+    bool isAttachmentEXT()  const { return false; }
     bool isCombined()    const { return true; }
     bool isImage()       const { return false; }
     bool isImageClass()  const { return false; }
@@ -122,8 +124,9 @@
     bool isBuffer()      const { return dim == EsdBuffer; }
     bool isRect()        const { return dim == EsdRect; }
     bool isSubpass()     const { return dim == EsdSubpass; }
+    bool isAttachmentEXT()  const { return dim == EsdAttachmentEXT; }
     bool isCombined()    const { return combined; }
-    bool isImage()       const { return image && !isSubpass(); }
+    bool isImage()       const { return image && !isSubpass() && !isAttachmentEXT();}
     bool isImageClass()  const { return image; }
     bool isMultiSample() const { return ms; }
     bool isExternal()    const { return external; }
@@ -214,6 +217,15 @@
         dim = EsdSubpass;
         ms = m;
     }
+
+    // make an AttachmentEXT
+    void setAttachmentEXT(TBasicType t)
+    {
+        clear();
+        type = t;
+        image = true;
+        dim = EsdAttachmentEXT;
+    }
 #endif
 
     bool operator==(const TSampler& right) const
@@ -264,7 +276,9 @@
         default:  break;
         }
         if (isImageClass()) {
-            if (isSubpass())
+            if (isAttachmentEXT())
+                s.append("attachmentEXT");
+            else if (isSubpass())
                 s.append("subpass");
             else
                 s.append("image");
@@ -285,10 +299,11 @@
         case Esd3D:      s.append("3D");      break;
         case EsdCube:    s.append("Cube");    break;
 #ifndef GLSLANG_WEB
-        case Esd1D:      s.append("1D");      break;
-        case EsdRect:    s.append("2DRect");  break;
-        case EsdBuffer:  s.append("Buffer");  break;
-        case EsdSubpass: s.append("Input"); break;
+        case Esd1D:         s.append("1D");      break;
+        case EsdRect:       s.append("2DRect");  break;
+        case EsdBuffer:     s.append("Buffer");  break;
+        case EsdSubpass:    s.append("Input"); break;
+        case EsdAttachmentEXT: s.append(""); break;
 #endif
         default:  break;  // some compilers want this
         }
@@ -429,6 +444,12 @@
     ElfR16ui,
     ElfR8ui,
     ElfR64ui,
+    ElfExtSizeGuard,   // to help with comparisons
+    ElfSize1x8,
+    ElfSize1x16,
+    ElfSize1x32,
+    ElfSize2x32,
+    ElfSize4x32,
 
     ElfCount
 };
@@ -863,6 +884,9 @@
     bool isAnyCallable() const {
         return storage == EvqCallableData || storage == EvqCallableDataIn;
     }
+    bool isHitObjectAttrNV() const {
+        return storage == EvqHitObjectAttrNV;
+    }
 
     // True if this type of IO is supposed to be arrayed with extra level for per-vertex data
     bool isArrayedIo(EShLanguage language) const
@@ -898,6 +922,9 @@
         // -2048 as the default value indicating layoutSecondaryViewportRelative is not set
         layoutSecondaryViewportRelativeOffset = -2048;
         layoutShaderRecord = false;
+        layoutHitObjectShaderRecordNV = false;
+        layoutBindlessSampler = false;
+        layoutBindlessImage = false;
         layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd;
         layoutFormat = ElfNone;
 #endif
@@ -997,10 +1024,14 @@
     bool layoutViewportRelative;
     int layoutSecondaryViewportRelativeOffset;
     bool layoutShaderRecord;
+    bool layoutHitObjectShaderRecordNV;
 
     // GL_EXT_spirv_intrinsics
     int spirvStorageClass;
     TSpirvDecorate* spirvDecorate;
+
+    bool layoutBindlessSampler;
+    bool layoutBindlessImage;
 #endif
 
     bool hasUniformLayout() const
@@ -1123,6 +1154,7 @@
     TLayoutFormat getFormat() const { return layoutFormat; }
     bool isPushConstant() const { return layoutPushConstant; }
     bool isShaderRecord() const { return layoutShaderRecord; }
+    bool hasHitObjectShaderRecordNV() const { return layoutHitObjectShaderRecordNV; }
     bool hasBufferReference() const { return layoutBufferReference; }
     bool hasBufferReferenceAlign() const
     {
@@ -1132,6 +1164,14 @@
     {
         return nonUniform;
     }
+    bool isBindlessSampler() const
+    {
+        return layoutBindlessSampler;
+    }
+    bool isBindlessImage() const
+    {
+        return layoutBindlessImage;
+    }
 
     // GL_EXT_spirv_intrinsics
     bool hasSprivDecorate() const { return spirvDecorate != nullptr; }
@@ -1241,6 +1281,11 @@
         case ElfR8ui:         return "r8ui";
         case ElfR64ui:        return "r64ui";
         case ElfR64i:         return "r64i";
+        case ElfSize1x8:      return "size1x8";
+        case ElfSize1x16:     return "size1x16";
+        case ElfSize1x32:     return "size1x32";
+        case ElfSize2x32:     return "size2x32";
+        case ElfSize4x32:     return "size4x32";
         default:              return "none";
         }
     }
@@ -1364,6 +1409,9 @@
     bool earlyFragmentTests;  // fragment input
     bool postDepthCoverage;   // fragment input
     bool earlyAndLateFragmentTestsAMD; //fragment input
+    bool nonCoherentColorAttachmentReadEXT;    // fragment input
+    bool nonCoherentDepthAttachmentReadEXT;    // fragment input
+    bool nonCoherentStencilAttachmentReadEXT;  // fragment input
     TLayoutDepth layoutDepth;
     TLayoutStencil layoutStencil;
     bool blendEquation;       // true if any blend equation was specified
@@ -1403,6 +1451,9 @@
         earlyFragmentTests = false;
         earlyAndLateFragmentTestsAMD = false;
         postDepthCoverage = false;
+        nonCoherentColorAttachmentReadEXT = false;
+        nonCoherentDepthAttachmentReadEXT = false;
+        nonCoherentStencilAttachmentReadEXT = false;
         layoutDepth = EldNone;
         layoutStencil = ElsNone;
         blendEquation = false;
@@ -1460,6 +1511,12 @@
             earlyAndLateFragmentTestsAMD = true;
         if (src.postDepthCoverage)
             postDepthCoverage = true;
+        if (src.nonCoherentColorAttachmentReadEXT)
+            nonCoherentColorAttachmentReadEXT = true;
+        if (src.nonCoherentDepthAttachmentReadEXT)
+            nonCoherentDepthAttachmentReadEXT = true;
+        if (src.nonCoherentStencilAttachmentReadEXT)
+            nonCoherentStencilAttachmentReadEXT = true;
         if (src.layoutDepth)
             layoutDepth = src.layoutDepth;
         if (src.layoutStencil)
@@ -1573,8 +1630,9 @@
 #endif
 
     // "Image" is a superset of "Subpass"
-    bool isImage()   const { return basicType == EbtSampler && sampler.isImage(); }
-    bool isSubpass() const { return basicType == EbtSampler && sampler.isSubpass(); }
+    bool isImage()      const { return basicType == EbtSampler && sampler.isImage(); }
+    bool isSubpass()    const { return basicType == EbtSampler && sampler.isSubpass(); }
+    bool isAttachmentEXT() const { return basicType == EbtSampler && sampler.isAttachmentEXT(); }
 };
 
 //
@@ -1730,14 +1788,15 @@
                             }
     // for block reference (first parameter must be EbtReference)
     explicit TType(TBasicType t, const TType &p, const TString& n) :
-                            basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false),
-                            arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr)
+                            basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false),
+                            arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr)
 #ifndef GLSLANG_WEB
                             , spirvType(nullptr)
 #endif
                             {
                                 assert(t == EbtReference);
                                 typeName = NewPoolTString(n.c_str());
+                                sampler.clear();
                                 qualifier.clear();
                                 qualifier.storage = p.qualifier.storage;
                                 referentType = p.clone();
@@ -1864,9 +1923,11 @@
     virtual bool isArray()  const { return arraySizes != nullptr; }
     virtual bool isSizedArray() const { return isArray() && arraySizes->isSized(); }
     virtual bool isUnsizedArray() const { return isArray() && !arraySizes->isSized(); }
+    virtual bool isImplicitlySizedArray() const { return isArray() && arraySizes->isImplicitlySized(); }
     virtual bool isArrayVariablyIndexed() const { assert(isArray()); return arraySizes->isVariablyIndexed(); }
     virtual void setArrayVariablyIndexed() { assert(isArray()); arraySizes->setVariablyIndexed(); }
     virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); }
+    virtual void setImplicitlySized(bool isImplicitSized) { arraySizes->setImplicitlySized(isImplicitSized); }
     virtual bool isStruct() const { return basicType == EbtStruct || basicType == EbtBlock; }
     virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16; }
     virtual bool isIntegerDomain() const
@@ -1889,15 +1950,18 @@
     }
     virtual bool isOpaque() const { return basicType == EbtSampler
 #ifndef GLSLANG_WEB
-            || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery
+            || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery 
+            || basicType == EbtHitObjectNV
 #endif
         ; }
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
 
-    // "Image" is a superset of "Subpass"
-    virtual bool isImage()   const { return basicType == EbtSampler && getSampler().isImage(); }
+    virtual bool isAttachmentEXT() const { return basicType == EbtSampler && getSampler().isAttachmentEXT(); }
+    virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); }
     virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
     virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); }
+    virtual bool isBindlessImage() const { return isImage() && qualifier.layoutBindlessImage; }
+    virtual bool isBindlessTexture() const { return isTexture() && qualifier.layoutBindlessSampler; }
     // Check the block-name convention of creating a block without populating it's members:
     virtual bool isUnusableName() const { return isStruct() && structure == nullptr; }
     virtual bool isParameterized()  const { return typeParameters != nullptr; }
@@ -1954,6 +2018,11 @@
         return contains([](const TType* t) { return t->isOpaque(); } );
     }
 
+    virtual bool containsSampler() const
+    {
+        return contains([](const TType* t) { return t->isTexture() || t->isImage(); });
+    }
+
     // Recursively checks if the type contains a built-in variable
     virtual bool containsBuiltIn() const
     {
@@ -2087,8 +2156,12 @@
     // an explicit array.
     void adoptImplicitArraySizes(bool skipNonvariablyIndexed)
     {
-        if (isUnsizedArray() && !(skipNonvariablyIndexed || isArrayVariablyIndexed()))
+        if (isUnsizedArray() &&
+            (qualifier.builtIn == EbvSampleMask ||
+                !(skipNonvariablyIndexed || isArrayVariablyIndexed()))) {
             changeOuterArraySize(getImplicitArraySize());
+            setImplicitlySized(true);
+        }
         // For multi-dim per-view arrays, set unsized inner dimension size to 1
         if (qualifier.isPerView() && arraySizes && arraySizes->isInnerUnsized())
             arraySizes->clearInnerUnsized();
@@ -2283,8 +2356,16 @@
                 appendStr(" layoutSecondaryViewportRelativeOffset=");
                 appendInt(qualifier.layoutSecondaryViewportRelativeOffset);
               }
+              
               if (qualifier.layoutShaderRecord)
                 appendStr(" shaderRecordNV");
+              if (qualifier.layoutHitObjectShaderRecordNV)
+                appendStr(" hitobjectshaderrecordnv");
+
+              if (qualifier.layoutBindlessSampler)
+                  appendStr(" layoutBindlessSampler");
+              if (qualifier.layoutBindlessImage)
+                  appendStr(" layoutBindlessImage");
 
               appendStr(")");
             }
@@ -2544,6 +2625,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; }
+    void setVectorSize(int s) { vectorSize = s; }
 
     int computeNumComponents() const
     {
@@ -2711,7 +2793,10 @@
     bool sameArrayness(const TType& right) const
     {
         return ((arraySizes == nullptr && right.arraySizes == nullptr) ||
-                (arraySizes != nullptr && right.arraySizes != nullptr && *arraySizes == *right.arraySizes));
+                (arraySizes != nullptr && right.arraySizes != nullptr &&
+                 (*arraySizes == *right.arraySizes ||
+                  (arraySizes->isImplicitlySized() && right.arraySizes->isDefaultImplicitlySized()) ||
+                  (right.arraySizes->isImplicitlySized() && arraySizes->isDefaultImplicitlySized()))));
     }
 
     // See if two type's arrayness match in everything except their outer dimension
diff --git a/glslang/Include/arrays.h b/glslang/Include/arrays.h
index 7f047d9..1da14d0 100644
--- a/glslang/Include/arrays.h
+++ b/glslang/Include/arrays.h
@@ -222,7 +222,7 @@
 struct TArraySizes {
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
 
-    TArraySizes() : implicitArraySize(1), variablyIndexed(false) { }
+    TArraySizes() : implicitArraySize(0), implicitlySized(true), variablyIndexed(false){ }
 
     // For breaking into two non-shared copies, independently modifiable.
     TArraySizes& operator=(const TArraySizes& from)
@@ -230,6 +230,7 @@
         implicitArraySize = from.implicitArraySize;
         variablyIndexed = from.variablyIndexed;
         sizes = from.sizes;
+        implicitlySized = from.implicitlySized;
 
         return *this;
     }
@@ -256,11 +257,17 @@
     void addInnerSize(int s, TIntermTyped* n) { sizes.push_back((unsigned)s, n); }
     void addInnerSize(TArraySize pair) {
         sizes.push_back(pair.size, pair.node);
+        implicitlySized = false;
     }
     void addInnerSizes(const TArraySizes& s) { sizes.push_back(s.sizes); }
-    void changeOuterSize(int s) { sizes.changeFront((unsigned)s); }
-    int getImplicitSize() const { return implicitArraySize; }
-    void updateImplicitSize(int s) { implicitArraySize = std::max(implicitArraySize, s); }
+    void changeOuterSize(int s) {
+        sizes.changeFront((unsigned)s);
+        implicitlySized = false;
+    }
+    int getImplicitSize() const { return implicitArraySize > 0 ? implicitArraySize : 1; }
+    void updateImplicitSize(int s) {
+        implicitArraySize = (std::max)(implicitArraySize, s);
+    }
     bool isInnerUnsized() const
     {
         for (int d = 1; d < sizes.size(); ++d) {
@@ -295,6 +302,9 @@
 
     bool hasUnsized() const { return getOuterSize() == UnsizedArraySize || isInnerUnsized(); }
     bool isSized() const { return getOuterSize() != UnsizedArraySize; }
+    bool isImplicitlySized() const { return implicitlySized; }
+    bool isDefaultImplicitlySized() const { return implicitlySized && implicitArraySize == 0; }
+    void setImplicitlySized(bool isImplicitSizing) { implicitlySized = isImplicitSizing; }
     void dereference() { sizes.pop_front(); }
     void copyDereferenced(const TArraySizes& rhs)
     {
@@ -333,6 +343,7 @@
     // the implicit size of the array, if not variably indexed and
     // otherwise legal.
     int implicitArraySize;
+    bool implicitlySized;
     bool variablyIndexed;  // true if array is indexed with a non compile-time constant
 };
 
diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h
index f540f26..fd636cf 100644
--- a/glslang/Include/glslang_c_interface.h
+++ b/glslang/Include/glslang_c_interface.h
@@ -157,28 +157,17 @@
     int max_task_work_group_size_y_ext;
     int max_task_work_group_size_z_ext;
     int max_mesh_view_count_ext;
-    int maxDualSourceDrawBuffersEXT;
+    union
+    {
+        int max_dual_source_draw_buffers_ext;
+
+        /* Incorrectly capitalized name retained for backward compatibility */
+        int maxDualSourceDrawBuffersEXT;
+    };
 
     glslang_limits_t limits;
 } glslang_resource_t;
 
-typedef struct glslang_input_s {
-    glslang_source_t language;
-    glslang_stage_t stage;
-    glslang_client_t client;
-    glslang_target_client_version_t client_version;
-    glslang_target_language_t target_language;
-    glslang_target_language_version_t target_language_version;
-    /** Shader source code */
-    const char* code;
-    int default_version;
-    glslang_profile_t default_profile;
-    int force_default_version_and_profile;
-    int forward_compatible;
-    glslang_messages_t messages;
-    const glslang_resource_t* resource;
-} glslang_input_t;
-
 /* Inclusion result structure allocated by C include_local/include_system callbacks */
 typedef struct glsl_include_result_s {
     /* Header file name or NULL if inclusion failed */
@@ -208,6 +197,25 @@
     glsl_free_include_result_func free_include_result;
 } glsl_include_callbacks_t;
 
+typedef struct glslang_input_s {
+    glslang_source_t language;
+    glslang_stage_t stage;
+    glslang_client_t client;
+    glslang_target_client_version_t client_version;
+    glslang_target_language_t target_language;
+    glslang_target_language_version_t target_language_version;
+    /** Shader source code */
+    const char* code;
+    int default_version;
+    glslang_profile_t default_profile;
+    int force_default_version_and_profile;
+    int forward_compatible;
+    glslang_messages_t messages;
+    const glslang_resource_t* resource;
+    glsl_include_callbacks_t callbacks;
+    void* callbacks_ctx;
+} glslang_input_t;
+
 /* SpvOptions counterpart */
 typedef struct glslang_spv_options_s {
     bool generate_debug_info;
@@ -240,8 +248,8 @@
 #define GLSLANG_EXPORT
 #endif
 
-GLSLANG_EXPORT int glslang_initialize_process();
-GLSLANG_EXPORT void glslang_finalize_process();
+GLSLANG_EXPORT int glslang_initialize_process(void);
+GLSLANG_EXPORT void glslang_finalize_process(void);
 
 GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
 GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader);
@@ -256,7 +264,7 @@
 GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader);
 GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
 
-GLSLANG_EXPORT glslang_program_t* glslang_program_create();
+GLSLANG_EXPORT glslang_program_t* glslang_program_create(void);
 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
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index a024002..e6b4df4 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -827,6 +827,7 @@
     EOpSubpassLoadMS,
     EOpSparseImageLoad,
     EOpSparseImageLoadLod,
+    EOpColorAttachmentReadEXT, // Fragment only
 
     EOpImageGuardEnd,
 
@@ -968,7 +969,42 @@
     EOpRayQueryGetIntersectionObjectToWorld,
     EOpRayQueryGetIntersectionWorldToObject,
 
+    // 
+    // GL_NV_shader_invocation_reorder
     //
+
+    EOpHitObjectTraceRayNV,
+    EOpHitObjectTraceRayMotionNV,
+    EOpHitObjectRecordHitNV,
+    EOpHitObjectRecordHitMotionNV,
+    EOpHitObjectRecordHitWithIndexNV,
+    EOpHitObjectRecordHitWithIndexMotionNV,
+    EOpHitObjectRecordMissNV,
+    EOpHitObjectRecordMissMotionNV,
+    EOpHitObjectRecordEmptyNV,
+    EOpHitObjectExecuteShaderNV,
+    EOpHitObjectIsEmptyNV,
+    EOpHitObjectIsMissNV,
+    EOpHitObjectIsHitNV,
+    EOpHitObjectGetRayTMinNV,
+    EOpHitObjectGetRayTMaxNV,
+    EOpHitObjectGetObjectRayOriginNV,
+    EOpHitObjectGetObjectRayDirectionNV,
+    EOpHitObjectGetWorldRayOriginNV,
+    EOpHitObjectGetWorldRayDirectionNV,
+    EOpHitObjectGetWorldToObjectNV,
+    EOpHitObjectGetObjectToWorldNV,
+    EOpHitObjectGetInstanceCustomIndexNV,
+    EOpHitObjectGetInstanceIdNV,
+    EOpHitObjectGetGeometryIndexNV,
+    EOpHitObjectGetPrimitiveIndexNV,
+    EOpHitObjectGetHitKindNV,
+    EOpHitObjectGetShaderBindingTableRecordIndexNV,
+    EOpHitObjectGetShaderRecordBufferHandleNV,
+    EOpHitObjectGetAttributesNV,
+    EOpHitObjectGetCurrentTimeNV,
+    EOpReorderThreadNV,
+
     // HLSL operations
     //
 
@@ -1055,6 +1091,13 @@
     // Shader Clock Ops
     EOpReadClockSubgroupKHR,
     EOpReadClockDeviceKHR,
+
+    // GL_EXT_ray_tracing_position_fetch
+    EOpRayQueryGetIntersectionTriangleVertexPositionsEXT,
+
+    // Shader tile image ops
+    EOpStencilAttachmentReadEXT, // Fragment only
+    EOpDepthAttachmentReadEXT, // Fragment only
 };
 
 class TIntermTraverser;
@@ -1086,31 +1129,31 @@
     virtual const glslang::TSourceLoc& getLoc() const { return loc; }
     virtual void setLoc(const glslang::TSourceLoc& l) { loc = l; }
     virtual void traverse(glslang::TIntermTraverser*) = 0;
-    virtual       glslang::TIntermTyped*         getAsTyped()               { return 0; }
-    virtual       glslang::TIntermOperator*      getAsOperator()            { return 0; }
-    virtual       glslang::TIntermConstantUnion* getAsConstantUnion()       { return 0; }
-    virtual       glslang::TIntermAggregate*     getAsAggregate()           { return 0; }
-    virtual       glslang::TIntermUnary*         getAsUnaryNode()           { return 0; }
-    virtual       glslang::TIntermBinary*        getAsBinaryNode()          { return 0; }
-    virtual       glslang::TIntermSelection*     getAsSelectionNode()       { return 0; }
-    virtual       glslang::TIntermSwitch*        getAsSwitchNode()          { return 0; }
-    virtual       glslang::TIntermMethod*        getAsMethodNode()          { return 0; }
-    virtual       glslang::TIntermSymbol*        getAsSymbolNode()          { return 0; }
-    virtual       glslang::TIntermBranch*        getAsBranchNode()          { return 0; }
-    virtual       glslang::TIntermLoop*          getAsLoopNode()            { return 0; }
+    virtual       glslang::TIntermTyped*         getAsTyped()               { return nullptr; }
+    virtual       glslang::TIntermOperator*      getAsOperator()            { return nullptr; }
+    virtual       glslang::TIntermConstantUnion* getAsConstantUnion()       { return nullptr; }
+    virtual       glslang::TIntermAggregate*     getAsAggregate()           { return nullptr; }
+    virtual       glslang::TIntermUnary*         getAsUnaryNode()           { return nullptr; }
+    virtual       glslang::TIntermBinary*        getAsBinaryNode()          { return nullptr; }
+    virtual       glslang::TIntermSelection*     getAsSelectionNode()       { return nullptr; }
+    virtual       glslang::TIntermSwitch*        getAsSwitchNode()          { return nullptr; }
+    virtual       glslang::TIntermMethod*        getAsMethodNode()          { return nullptr; }
+    virtual       glslang::TIntermSymbol*        getAsSymbolNode()          { return nullptr; }
+    virtual       glslang::TIntermBranch*        getAsBranchNode()          { return nullptr; }
+    virtual       glslang::TIntermLoop*          getAsLoopNode()            { return nullptr; }
 
-    virtual const glslang::TIntermTyped*         getAsTyped()         const { return 0; }
-    virtual const glslang::TIntermOperator*      getAsOperator()      const { return 0; }
-    virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return 0; }
-    virtual const glslang::TIntermAggregate*     getAsAggregate()     const { return 0; }
-    virtual const glslang::TIntermUnary*         getAsUnaryNode()     const { return 0; }
-    virtual const glslang::TIntermBinary*        getAsBinaryNode()    const { return 0; }
-    virtual const glslang::TIntermSelection*     getAsSelectionNode() const { return 0; }
-    virtual const glslang::TIntermSwitch*        getAsSwitchNode()    const { return 0; }
-    virtual const glslang::TIntermMethod*        getAsMethodNode()    const { return 0; }
-    virtual const glslang::TIntermSymbol*        getAsSymbolNode()    const { return 0; }
-    virtual const glslang::TIntermBranch*        getAsBranchNode()    const { return 0; }
-    virtual const glslang::TIntermLoop*          getAsLoopNode()      const { return 0; }
+    virtual const glslang::TIntermTyped*         getAsTyped()         const { return nullptr; }
+    virtual const glslang::TIntermOperator*      getAsOperator()      const { return nullptr; }
+    virtual const glslang::TIntermConstantUnion* getAsConstantUnion() const { return nullptr; }
+    virtual const glslang::TIntermAggregate*     getAsAggregate()     const { return nullptr; }
+    virtual const glslang::TIntermUnary*         getAsUnaryNode()     const { return nullptr; }
+    virtual const glslang::TIntermBinary*        getAsBinaryNode()    const { return nullptr; }
+    virtual const glslang::TIntermSelection*     getAsSelectionNode() const { return nullptr; }
+    virtual const glslang::TIntermSwitch*        getAsSwitchNode()    const { return nullptr; }
+    virtual const glslang::TIntermMethod*        getAsMethodNode()    const { return nullptr; }
+    virtual const glslang::TIntermSymbol*        getAsSymbolNode()    const { return nullptr; }
+    virtual const glslang::TIntermBranch*        getAsBranchNode()    const { return nullptr; }
+    virtual const glslang::TIntermLoop*          getAsLoopNode()      const { return nullptr; }
     virtual ~TIntermNode() { }
 
 protected:
@@ -1358,6 +1401,7 @@
     bool subpass;
     bool lodClamp;
     bool fragMask;
+    bool attachmentEXT;
 };
 
 //
@@ -1414,6 +1458,7 @@
         cracked.gather = false;
         cracked.grad = false;
         cracked.subpass = false;
+        cracked.attachmentEXT = false;
         cracked.lodClamp = false;
         cracked.fragMask = false;
 
@@ -1574,6 +1619,9 @@
         case EOpSubpassLoadMS:
             cracked.subpass = true;
             break;
+        case EOpColorAttachmentReadEXT:
+            cracked.attachmentEXT = true;
+            break;
 #endif
         default:
             break;
@@ -1616,8 +1664,8 @@
 //
 class TIntermUnary : public TIntermOperator {
 public:
-    TIntermUnary(TOperator o, TType& t) : TIntermOperator(o, t), operand(0) {}
-    TIntermUnary(TOperator o) : TIntermOperator(o), operand(0) {}
+    TIntermUnary(TOperator o, TType& t) : TIntermOperator(o, t), operand(nullptr) {}
+    TIntermUnary(TOperator o) : TIntermOperator(o), operand(nullptr) {}
     virtual void traverse(TIntermTraverser*);
     virtual void setOperand(TIntermTyped* o) { operand = o; }
     virtual       TIntermTyped* getOperand() { return operand; }
@@ -1819,7 +1867,7 @@
 
     TIntermNode *getParentNode()
     {
-        return path.size() == 0 ? NULL : path.back();
+        return path.size() == 0 ? nullptr : path.back();
     }
 
     const bool preVisit;
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 5fc61db..f6916cb 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -212,9 +212,9 @@
 
             case EbtInt64:
                 if (rightUnionArray[i] == 0ll)
-                    newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll);
-                else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == (long long)-0x8000000000000000ll)
-                    newConstArray[i].setI64Const((long long)-0x8000000000000000ll);
+                    newConstArray[i].setI64Const(LLONG_MAX);
+                else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN)
+                    newConstArray[i].setI64Const(LLONG_MIN);
                 else
                     newConstArray[i].setI64Const(leftUnionArray[i].getI64Const() / rightUnionArray[i].getI64Const());
                 break;
@@ -226,7 +226,7 @@
                     newConstArray[i].setU64Const(leftUnionArray[i].getU64Const() / rightUnionArray[i].getU64Const());
                 break;
             default:
-                return 0;
+                return nullptr;
 #endif
             }
         }
@@ -354,7 +354,7 @@
         break;
 
     default:
-        return 0;
+        return nullptr;
     }
 
     TIntermConstantUnion *newNode = new TIntermConstantUnion(newConstArray, returnType);
@@ -1345,7 +1345,7 @@
 {
     TType dereferencedType(node->getType(), index);
     dereferencedType.getQualifier().storage = EvqConst;
-    TIntermTyped* result = 0;
+    TIntermTyped* result = nullptr;
     int size = dereferencedType.computeNumComponents();
 
     // arrays, vectors, matrices, all use simple multiplicative math
@@ -1365,7 +1365,7 @@
 
     result = addConstantUnion(TConstUnionArray(node->getAsConstantUnion()->getConstArray(), start, size), node->getType(), loc);
 
-    if (result == 0)
+    if (result == nullptr)
         result = node;
     else
         result->setType(dereferencedType);
@@ -1387,7 +1387,7 @@
 
     TIntermTyped* result = addConstantUnion(constArray, node->getType(), loc);
 
-    if (result == 0)
+    if (result == nullptr)
         result = node;
     else
         result->setType(TType(node->getBasicType(), EvqConst, selectors.size()));
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
old mode 100644
new mode 100755
index 0cbb9e7..39f42b6
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -147,10 +147,6 @@
 #ifdef GLSLANG_WEB
     const Versioning* Es300Desktop130 = nullptr;
     const Versioning* Es310Desktop420 = nullptr;
-#elif defined(GLSLANG_ANGLE)
-    const Versioning* Es300Desktop130 = nullptr;
-    const Versioning* Es310Desktop420 = nullptr;
-    const Versioning* Es310Desktop450 = nullptr;
 #else
     const Versioning Es300Desktop130Version[] = { { EEsProfile,      0, 300, 0, nullptr },
                                                   { EDesktopProfile, 0, 130, 0, nullptr },
@@ -420,7 +416,7 @@
 // See if the tabled versioning information allows the current version.
 bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
 {
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+#if defined(GLSLANG_WEB)
     // all entries in table are valid
     return true;
 #endif
@@ -505,7 +501,7 @@
     prefixes[EbtFloat] =  "";
     prefixes[EbtInt]   = "i";
     prefixes[EbtUint]  = "u";
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     prefixes[EbtFloat16] = "f16";
     prefixes[EbtInt8]  = "i8";
     prefixes[EbtUint8] = "u8";
@@ -524,12 +520,11 @@
     dimMap[Esd3D] = 3;
     dimMap[EsdCube] = 3;
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     dimMap[Esd1D] = 1;
-#endif
     dimMap[EsdRect] = 2;
     dimMap[EsdBuffer] = 1;
     dimMap[EsdSubpass] = 2;  // potentially unused for now
+    dimMap[EsdAttachmentEXT] = 2;  // potentially unused for now
 #endif
 }
 
@@ -551,9 +546,6 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
     addTabledBuiltins(version, profile, spvVersion);
 
@@ -599,7 +591,6 @@
         "vec4  fwidthCoarse(vec4  p);"
     );
 
-#ifndef GLSLANG_ANGLE
     TString derivativesAndControl16bits (
         "float16_t dFdx(float16_t);"
         "f16vec2   dFdx(f16vec2);"
@@ -1393,7 +1384,6 @@
             "\n"
         );
     }
-#endif // !GLSLANG_ANGLE
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
@@ -1431,7 +1421,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 440) {
         commonBuiltins.append(
             "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);"
@@ -1511,7 +1500,6 @@
             "void atomicStore(coherent volatile out double, double, int, int, int);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
 
     if ((profile == EEsProfile && version >= 300) ||
@@ -1552,7 +1540,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
             commonBuiltins.append(
                 "double fma(double, double, double);"
@@ -1570,7 +1557,6 @@
                 "f64vec4  fma(f64vec4,  f64vec4,  f64vec4 );"
                 "\n");
     }
-#endif
 
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 400)) {
@@ -1588,7 +1574,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
         commonBuiltins.append(
             "double frexp(double, out int);"
@@ -1622,7 +1607,6 @@
             "\n");
     }
 #endif
-#endif
 
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) {
@@ -1731,7 +1715,6 @@
     }
 
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     //
     // Original-style texture functions existing in all stages.
     // (Per-stage functions below.)
@@ -1926,7 +1909,6 @@
                 "\n");
         }
     }
-#endif // !GLSLANG_ANGLE
 
     // Bitfield
     if ((profile == EEsProfile && version >= 310) ||
@@ -2069,7 +2051,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
         commonBuiltins.append(
@@ -3390,7 +3371,6 @@
             "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 
     if ((profile == EEsProfile && version >= 300 && version < 310) ||
         (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
@@ -3410,7 +3390,6 @@
                               "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // GL_AMD_gpu_shader_half_float/Explicit types
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
         commonBuiltins.append(
@@ -4184,7 +4163,6 @@
             "\n");
 
     }
-#endif // !GLSLANG_ANGLE
 
     //============================================================================
     //
@@ -4200,7 +4178,6 @@
     if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
         stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 
-#ifndef GLSLANG_ANGLE
     //
     // Original-style texture Functions with lod.
     //
@@ -4260,7 +4237,6 @@
                 "\n");
         }
     }
-#endif // !GLSLANG_ANGLE
 
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
@@ -4341,7 +4317,6 @@
 
     commonBuiltins.append("void debugPrintfEXT();\n");
 
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 450) {
         // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
         // adding it introduces undesirable tempArgs on the stack. What we want
@@ -4465,7 +4440,24 @@
 
             "\n");
     }
-#endif // !GLSLANG_ANGLE
+
+    // GL_EXT_shader_tile_image
+    if (spvVersion.vulkan > 0) {
+        stageBuiltins[EShLangFragment].append(
+            "lowp uint stencilAttachmentReadEXT();"
+            "lowp uint stencilAttachmentReadEXT(int);"
+            "highp float depthAttachmentReadEXT();"
+            "highp float depthAttachmentReadEXT(int);"
+            "\n");
+        stageBuiltins[EShLangFragment].append(
+            "vec4 colorAttachmentReadEXT(attachmentEXT);"
+            "vec4 colorAttachmentReadEXT(attachmentEXT, int);"
+            "ivec4 colorAttachmentReadEXT(iattachmentEXT);"
+            "ivec4 colorAttachmentReadEXT(iattachmentEXT, int);"
+            "uvec4 colorAttachmentReadEXT(uattachmentEXT);"
+            "uvec4 colorAttachmentReadEXT(uattachmentEXT, int);"
+            "\n");
+    }
 
     // GL_ARB_derivative_control
     if (profile != EEsProfile && version >= 400) {
@@ -4503,7 +4495,6 @@
         "bool helperInvocationEXT();"
         "\n");
 
-#ifndef GLSLANG_ANGLE
     // GL_AMD_shader_explicit_vertex_parameter
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangFragment].append(
@@ -4578,7 +4569,8 @@
             "\n");
         }
 
-    // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query
+    // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query/
+    // GL_NV_shader_invocation_reorder/GL_KHR_ray_tracing_position_Fetch
     if (profile != EEsProfile && version >= 460) {
          commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);"
             "void rayQueryTerminateEXT(rayQueryEXT);"
@@ -4603,6 +4595,7 @@
             "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);"
             "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);"
             "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);"
+            "void rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQueryEXT, bool, out vec3[3]);"
             "\n");
 
         stageBuiltins[EShLangRayGen].append(
@@ -4611,6 +4604,39 @@
             "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
             "void executeCallableEXT(uint, int);"
+            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordHitWithIndexNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordMissNV(hitObjectNV,uint,vec3,float,vec3,float);"
+            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
+            "void hitObjectRecordEmptyNV(hitObjectNV);"
+            "void hitObjectExecuteShaderNV(hitObjectNV,int);"
+            "bool hitObjectIsEmptyNV(hitObjectNV);"
+            "bool hitObjectIsMissNV(hitObjectNV);"
+            "bool hitObjectIsHitNV(hitObjectNV);"
+            "float hitObjectGetRayTMinNV(hitObjectNV);"
+            "float hitObjectGetRayTMaxNV(hitObjectNV);"
+            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
+            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
+            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
+            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
+            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
+            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
+            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
+            "int hitObjectGetInstanceIdNV(hitObjectNV);"
+            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
+            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
+            "uint hitObjectGetHitKindNV(hitObjectNV);"
+            "void hitObjectGetAttributesNV(hitObjectNV,int);"
+            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
+            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
+            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
+            "void reorderThreadNV(uint, uint);"
+            "void reorderThreadNV(hitObjectNV);"
+            "void reorderThreadNV(hitObjectNV, uint, uint);"
             "\n");
         stageBuiltins[EShLangIntersect].append(
             "bool reportIntersectionNV(float, uint);"
@@ -4626,6 +4652,36 @@
             "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
             "void executeCallableEXT(uint, int);"
+            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);"
+            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
+            "void hitObjectRecordEmptyNV(hitObjectNV);"
+            "void hitObjectExecuteShaderNV(hitObjectNV, int);"
+            "bool hitObjectIsEmptyNV(hitObjectNV);"
+            "bool hitObjectIsMissNV(hitObjectNV);"
+            "bool hitObjectIsHitNV(hitObjectNV);"
+            "float hitObjectGetRayTMinNV(hitObjectNV);"
+            "float hitObjectGetRayTMaxNV(hitObjectNV);"
+            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
+            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
+            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
+            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
+            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
+            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
+            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
+            "int hitObjectGetInstanceIdNV(hitObjectNV);"
+            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
+            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
+            "uint hitObjectGetHitKindNV(hitObjectNV);"
+            "void hitObjectGetAttributesNV(hitObjectNV,int);"
+            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
+            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
+            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
             "\n");
         stageBuiltins[EShLangMiss].append(
             "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
@@ -4633,20 +4689,48 @@
             "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
             "void executeCallableNV(uint, int);"
             "void executeCallableEXT(uint, int);"
+            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
+            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
+            "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);"
+            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
+            "void hitObjectRecordEmptyNV(hitObjectNV);"
+            "void hitObjectExecuteShaderNV(hitObjectNV, int);"
+            "bool hitObjectIsEmptyNV(hitObjectNV);"
+            "bool hitObjectIsMissNV(hitObjectNV);"
+            "bool hitObjectIsHitNV(hitObjectNV);"
+            "float hitObjectGetRayTMinNV(hitObjectNV);"
+            "float hitObjectGetRayTMaxNV(hitObjectNV);"
+            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
+            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
+            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
+            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
+            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
+            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
+            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
+            "int hitObjectGetInstanceIdNV(hitObjectNV);"
+            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
+            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
+            "uint hitObjectGetHitKindNV(hitObjectNV);"
+            "void hitObjectGetAttributesNV(hitObjectNV,int);"
+            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
+            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
+            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
             "\n");
         stageBuiltins[EShLangCallable].append(
             "void executeCallableNV(uint, int);"
             "void executeCallableEXT(uint, int);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 
     //E_SPV_NV_compute_shader_derivatives
     if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
         stageBuiltins[EShLangCompute].append(derivativeControls);
         stageBuiltins[EShLangCompute].append("\n");
     }
-#ifndef GLSLANG_ANGLE
     if (profile != EEsProfile && version >= 450) {
         stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
         stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
@@ -4670,7 +4754,6 @@
             "void SetMeshOutputsEXT(uint, uint);"
             "\n");
     }
-#endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
 
     //============================================================================
@@ -4708,7 +4791,7 @@
             "\n");
     }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
         //
         // Matrix state. p. 31, 32, 37, 39, 40.
@@ -4826,7 +4909,7 @@
 
             "\n");
     }
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
     //============================================================================
     //
@@ -4857,7 +4940,6 @@
     }
 
 #ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
     //============================================================================
     //
     // Define the interface to the mesh/task shader.
@@ -4974,7 +5056,6 @@
                 "\n");
         }
     }
-#endif // !GLSLANG_ANGLE
 
     //============================================================================
     //
@@ -5708,7 +5789,6 @@
             "\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // GL_ARB_shader_ballot
     if (profile != EEsProfile && version >= 450) {
         const char* ballotDecls =
@@ -5771,6 +5851,12 @@
             "in highp   uint  gl_SMCountNV;"
             "in highp   uint  gl_WarpIDNV;"
             "in highp   uint  gl_SMIDNV;"
+            // GL_ARM_shader_core_builtins
+            "in highp   uint  gl_CoreIDARM;"
+            "in highp   uint  gl_CoreCountARM;"
+            "in highp   uint  gl_CoreMaxIDARM;"
+            "in highp   uint  gl_WarpIDARM;"
+            "in highp   uint  gl_WarpMaxIDARM;"
             "\n";
         const char* fragmentSubgroupDecls =
             "flat in mediump uint  gl_SubgroupSize;"
@@ -5785,6 +5871,12 @@
             "flat in highp   uint  gl_SMCountNV;"
             "flat in highp   uint  gl_WarpIDNV;"
             "flat in highp   uint  gl_SMIDNV;"
+            // GL_ARM_shader_core_builtins
+            "flat in highp   uint  gl_CoreIDARM;"
+            "flat in highp   uint  gl_CoreCountARM;"
+            "flat in highp   uint  gl_CoreMaxIDARM;"
+            "flat in highp   uint  gl_WarpIDARM;"
+            "flat in highp   uint  gl_WarpMaxIDARM;"
             "\n";
         const char* computeSubgroupDecls =
             "in highp   uint  gl_NumSubgroups;"
@@ -5804,6 +5896,12 @@
             "in highp    uint  gl_SMCountNV;"
             "in highp volatile uint  gl_WarpIDNV;"
             "in highp volatile uint  gl_SMIDNV;"
+            // GL_ARM_shader_core_builtins
+            "in highp   uint  gl_CoreIDARM;"
+            "in highp   uint  gl_CoreCountARM;"
+            "in highp   uint  gl_CoreMaxIDARM;"
+            "in highp   uint  gl_WarpIDARM;"
+            "in highp   uint  gl_WarpMaxIDARM;"
             "\n";
 
         stageBuiltins[EShLangVertex]        .append(subgroupDecls);
@@ -5940,6 +6038,7 @@
             "in    uint   gl_IncomingRayFlagsEXT;"
             "in    float  gl_CurrentRayTimeNV;"
             "in    uint   gl_CullMaskEXT;"
+            "in    vec3   gl_HitTriangleVertexPositionsEXT[3];"
             "\n";
         const char *missDecls =
             "in    uvec3  gl_LaunchIDNV;"
@@ -6067,8 +6166,6 @@
             }
         }
     }
-#endif // !GLSLANG_ANGLE
-    
 #endif // !GLSLANG_WEB
 
     // printf("%s\n", commonBuiltins.c_str());
@@ -6088,7 +6185,7 @@
 
     // enumerate all the types
     const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint,
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         EbtFloat16
 #endif
     };
@@ -6122,11 +6219,9 @@
 #ifdef GLSLANG_WEB
                     for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube
 #else
-#if defined(GLSLANG_ANGLE)
-                    for (int dim = Esd2D; dim < EsdNumDims; ++dim) { // 2D, ..., buffer, subpass
-#else
                     for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
-#endif
+                        if (dim == EsdAttachmentEXT)
+                            continue;
                         if (dim == EsdSubpass && spvVersion.vulkan == 0)
                             continue;
                         if (dim == EsdSubpass && (image || shadow || arrayed))
@@ -6172,6 +6267,8 @@
 #ifndef GLSLANG_WEB
                             if (dim == EsdSubpass) {
                                 sampler.setSubpass(bTypes[bType], ms ? true : false);
+                            } else if (dim == EsdAttachmentEXT) {
+                                sampler.setAttachmentEXT(bTypes[bType]);
                             } else
 #endif
                             if (image) {
@@ -6578,9 +6675,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     //
@@ -6657,7 +6751,7 @@
                                     continue;
 
                                 // loop over 16-bit floating-point texel addressing
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+#if defined(GLSLANG_WEB)
                                 const int f16TexAddr = 0;
 #else
                                 for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
@@ -6670,7 +6764,7 @@
                                         totalDims--;
                                     }
                                     // loop over "bool" lod clamp
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+#if defined(GLSLANG_WEB)
                                     const int lodClamp = 0;
 #else
                                     for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
@@ -6682,7 +6776,7 @@
                                             continue;
 
                                         // loop over "bool" sparse or not
-#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE)
+#if defined(GLSLANG_WEB)
                                         const int sparse = 0;
 #else
                                         for (int sparse = 0; sparse <= 1; ++sparse)
@@ -6866,9 +6960,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     switch (sampler.dim) {
@@ -7112,9 +7203,6 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 
     //
@@ -7547,7 +7635,6 @@
         s.append("\n");
     }
 
-#ifndef GLSLANG_ANGLE
     // atomic counters (some in compute below)
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 420)) {
@@ -7584,7 +7671,6 @@
 
         s.append("\n");
     }
-#endif // !GLSLANG_ANGLE
 
     // GL_ARB_cull_distance
     if (profile != EEsProfile && version >= 450) {
@@ -7601,7 +7687,6 @@
         s.append(builtInConstant);
     }
 
-#ifndef GLSLANG_ANGLE
     // SPV_NV_mesh_shader
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
@@ -7625,7 +7710,6 @@
         s.append("\n");
     }
 #endif
-#endif
 
     s.append("\n");
 }
@@ -7731,9 +7815,6 @@
 #ifdef GLSLANG_WEB
     version = 310;
     profile = EEsProfile;
-#elif defined(GLSLANG_ANGLE)
-    version = 450;
-    profile = ECoreProfile;
 #endif
 
     //
@@ -8092,6 +8173,19 @@
             BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+
+            // GL_ARM_shader_core_builtins
+            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+
+            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
+            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
+            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
+            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
+            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
         }
 
 		if (language == EShLangGeometry || language == EShLangVertex) {
@@ -8166,6 +8260,7 @@
             symbolTable.setFunctionExtensions("rayQueryGetIntersectionWorldToObjectEXT",                          1, &E_GL_EXT_ray_query);
             symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT",                                     1, &E_GL_EXT_ray_query);
             symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT",                                  1, &E_GL_EXT_ray_query);
+            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTriangleVertexPositionsEXT",                1, &E_GL_EXT_ray_tracing_position_fetch);
             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);
@@ -8607,6 +8702,19 @@
             BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+
+            // GL_ARM_shader_core_builtins
+            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+
+            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
+            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
+            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
+            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
+            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
         }
 
         if (profile == EEsProfile) {
@@ -8647,6 +8755,11 @@
             symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
             symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
         }
+
+        // GL_EXT_shader_tile_image
+        symbolTable.setFunctionExtensions("stencilAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
+        symbolTable.setFunctionExtensions("depthAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
+        symbolTable.setFunctionExtensions("colorAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
 #endif // !GLSLANG_WEB
         break;
 
@@ -8750,6 +8863,19 @@
             BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+
+            // GL_ARM_shader_core_builtins
+            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+
+            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
+            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
+            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
+            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
+            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
         }
 
         // GL_KHR_shader_subgroup
@@ -8793,7 +8919,7 @@
 #endif // !GLSLANG_WEB
         break;
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     case EShLangRayGen:
     case EShLangIntersect:
     case EShLangAnyHit:
@@ -8837,6 +8963,7 @@
             symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing);
             symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing);
             symbolTable.setVariableExtensions("gl_CurrentRayTimeNV", 1, &E_GL_NV_ray_tracing_motion_blur);
+            symbolTable.setVariableExtensions("gl_HitTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch);
 
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
 
@@ -8851,6 +8978,38 @@
             symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
             symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
 
+            symbolTable.setFunctionExtensions("hitObjectTraceRayNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectTraceRayMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordHitNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordHitMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordMissNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordMissMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectRecordEmptyNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectExecuteShaderNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectIsEmptyNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectIsMissNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectIsHitNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetRayTMinNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetRayTMaxNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetObjectRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetObjectRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetWorldRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetWorldRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetWorldToObjectNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetbjectToWorldNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetInstanceCustomIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetInstanceIdNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetGeometryIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetPrimitiveIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetHitKindNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetAttributesNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleNV", 1, &E_GL_NV_shader_invocation_reorder);
+            symbolTable.setFunctionExtensions("reorderThreadNV", 1, &E_GL_NV_shader_invocation_reorder);
+
 
             BuiltInVariable("gl_LaunchIDNV",             EbvLaunchId,           symbolTable);
             BuiltInVariable("gl_LaunchIDEXT",            EbvLaunchId,           symbolTable);
@@ -8888,6 +9047,7 @@
             BuiltInVariable("gl_IncomingRayFlagsEXT",    EbvIncomingRayFlags,   symbolTable);
             BuiltInVariable("gl_DeviceIndex",            EbvDeviceIndex,        symbolTable);
             BuiltInVariable("gl_CurrentRayTimeNV",       EbvCurrentRayTimeNV,   symbolTable);
+            BuiltInVariable("gl_HitTriangleVertexPositionsEXT", EbvPositionFetch, symbolTable);
 
             // GL_ARB_shader_ballot
             symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
@@ -8944,6 +9104,19 @@
             BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+
+            // GL_ARM_shader_core_builtins
+            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+
+            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
+            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
+            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
+            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
+            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
         }
         if ((profile == EEsProfile && version >= 310) ||
             (profile != EEsProfile && version >= 450)) {
@@ -9150,6 +9323,19 @@
             BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+
+            // GL_ARM_shader_core_builtins
+            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+
+            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
+            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
+            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
+            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
+            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
         }
 
         if ((profile == EEsProfile && version >= 310) ||
@@ -9280,6 +9466,19 @@
             BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
             BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
             BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
+
+            // GL_ARM_shader_core_builtins
+            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
+            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
+
+            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
+            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
+            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
+            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
+            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
         }
         if ((profile == EEsProfile && version >= 310) ||
             (profile != EEsProfile && version >= 450)) {
@@ -9773,6 +9972,7 @@
             symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT",                                      EOpRayQueryGetWorldRayOrigin);
             symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT",                           EOpRayQueryGetIntersectionObjectToWorld);
             symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT",                           EOpRayQueryGetIntersectionWorldToObject);
+            symbolTable.relateToOperator("rayQueryGetIntersectionTriangleVertexPositionsEXT",                 EOpRayQueryGetIntersectionTriangleVertexPositionsEXT);
         }
 
         symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
@@ -9785,6 +9985,10 @@
         symbolTable.relateToOperator("beginInvocationInterlockARB", EOpBeginInvocationInterlock);
         symbolTable.relateToOperator("endInvocationInterlockARB",   EOpEndInvocationInterlock);
 
+        symbolTable.relateToOperator("stencilAttachmentReadEXT", EOpStencilAttachmentReadEXT);
+        symbolTable.relateToOperator("depthAttachmentReadEXT",   EOpDepthAttachmentReadEXT);
+        symbolTable.relateToOperator("colorAttachmentReadEXT",   EOpColorAttachmentReadEXT);
+
         break;
 
     case EShLangCompute:
@@ -9815,6 +10019,38 @@
             symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR);
             symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
             symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
+
+            symbolTable.relateToOperator("hitObjectTraceRayNV", EOpHitObjectTraceRayNV);
+            symbolTable.relateToOperator("hitObjectTraceRayMotionNV", EOpHitObjectTraceRayMotionNV);
+            symbolTable.relateToOperator("hitObjectRecordHitNV", EOpHitObjectRecordHitNV);
+            symbolTable.relateToOperator("hitObjectRecordHitMotionNV", EOpHitObjectRecordHitMotionNV);
+            symbolTable.relateToOperator("hitObjectRecordHitWithIndexNV", EOpHitObjectRecordHitWithIndexNV);
+            symbolTable.relateToOperator("hitObjectRecordHitWithIndexMotionNV", EOpHitObjectRecordHitWithIndexMotionNV);
+            symbolTable.relateToOperator("hitObjectRecordMissNV", EOpHitObjectRecordMissNV);
+            symbolTable.relateToOperator("hitObjectRecordMissMotionNV", EOpHitObjectRecordMissMotionNV);
+            symbolTable.relateToOperator("hitObjectRecordEmptyNV", EOpHitObjectRecordEmptyNV);
+            symbolTable.relateToOperator("hitObjectExecuteShaderNV", EOpHitObjectExecuteShaderNV);
+            symbolTable.relateToOperator("hitObjectIsEmptyNV", EOpHitObjectIsEmptyNV);
+            symbolTable.relateToOperator("hitObjectIsMissNV", EOpHitObjectIsMissNV);
+            symbolTable.relateToOperator("hitObjectIsHitNV", EOpHitObjectIsHitNV);
+            symbolTable.relateToOperator("hitObjectGetRayTMinNV", EOpHitObjectGetRayTMinNV);
+            symbolTable.relateToOperator("hitObjectGetRayTMaxNV", EOpHitObjectGetRayTMaxNV);
+            symbolTable.relateToOperator("hitObjectGetObjectRayOriginNV", EOpHitObjectGetObjectRayOriginNV);
+            symbolTable.relateToOperator("hitObjectGetObjectRayDirectionNV", EOpHitObjectGetObjectRayDirectionNV);
+            symbolTable.relateToOperator("hitObjectGetWorldRayOriginNV", EOpHitObjectGetWorldRayOriginNV);
+            symbolTable.relateToOperator("hitObjectGetWorldRayDirectionNV", EOpHitObjectGetWorldRayDirectionNV);
+            symbolTable.relateToOperator("hitObjectGetWorldToObjectNV", EOpHitObjectGetWorldToObjectNV);
+            symbolTable.relateToOperator("hitObjectGetObjectToWorldNV", EOpHitObjectGetObjectToWorldNV);
+            symbolTable.relateToOperator("hitObjectGetInstanceCustomIndexNV", EOpHitObjectGetInstanceCustomIndexNV);
+            symbolTable.relateToOperator("hitObjectGetInstanceIdNV", EOpHitObjectGetInstanceIdNV);
+            symbolTable.relateToOperator("hitObjectGetGeometryIndexNV", EOpHitObjectGetGeometryIndexNV);
+            symbolTable.relateToOperator("hitObjectGetPrimitiveIndexNV", EOpHitObjectGetPrimitiveIndexNV);
+            symbolTable.relateToOperator("hitObjectGetHitKindNV", EOpHitObjectGetHitKindNV);
+            symbolTable.relateToOperator("hitObjectGetAttributesNV", EOpHitObjectGetAttributesNV);
+            symbolTable.relateToOperator("hitObjectGetCurrentTimeNV", EOpHitObjectGetCurrentTimeNV);
+            symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexNV", EOpHitObjectGetShaderBindingTableRecordIndexNV);
+            symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleNV", EOpHitObjectGetShaderRecordBufferHandleNV);
+            symbolTable.relateToOperator("reorderThreadNV", EOpReorderThreadNV);
         }
         break;
     case EShLangIntersect:
@@ -9876,10 +10112,6 @@
 void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources)
 {
 #ifndef GLSLANG_WEB
-#if defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
-#endif
     if (profile != EEsProfile && version >= 430 && version < 440) {
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
         symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 6a43ef3..e542f90 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -352,7 +352,7 @@
 TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child,
     const TSourceLoc& loc)
 {
-    if (child == 0)
+    if (child == nullptr)
         return nullptr;
 
     if (child->getType().getBasicType() == EbtBlock)
@@ -751,6 +751,11 @@
         case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
         case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
 #endif
+        // For bindless texture type conversion, add a dummy convert op, just
+        // to generate a new TIntermTyped
+        // uvec2(any sampler type)
+        // uvec2(any image type)
+        case EbtSampler: newOp = EOpConvIntToUint;  break;
         default:
             return false;
         }
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index 616580f..c34c04f 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -159,7 +159,8 @@
         //
         switch (node->getBasicType()) {
         case EbtSampler:
-            message = "can't modify a sampler";
+            if (extensionTurnedOn(E_GL_ARB_bindless_texture) == false)
+                message = "can't modify a sampler";
             break;
         case EbtVoid:
             message = "can't modify void";
@@ -174,6 +175,9 @@
         case EbtRayQuery:
             message = "can't modify rayQueryEXT";
             break;
+        case EbtHitObjectNV:
+            message = "can't modify hitObjectNV";
+            break;
 #endif
         default:
             break;
@@ -231,12 +235,12 @@
 // Test for and give an error if the node can't be read from.
 void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node)
 {
-    TIntermBinary* binaryNode = node->getAsBinaryNode();
-    const TIntermSymbol* symNode = node->getAsSymbolNode();
-
     if (! node)
         return;
 
+    TIntermBinary* binaryNode = node->getAsBinaryNode();
+    const TIntermSymbol* symNode = node->getAsSymbolNode();
+
     if (node->getQualifier().isWriteOnly()) {
         const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true);
 
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index e2ac43c..c6f947d 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -80,10 +80,6 @@
     globalBufferDefaults.layoutMatrix = ElmColumnMajor;
     globalBufferDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd430 : ElpShared;
 
-    // use storage buffer on SPIR-V 1.3 and up
-    if (spvVersion.spv >= EShTargetSpv_1_3)
-        intermediate.setUseStorageBuffer();
-
     globalInputDefaults.clear();
     globalOutputDefaults.clear();
 
@@ -608,6 +604,15 @@
 #ifndef GLSLANG_WEB
         if (base->getType().isUnsizedArray()) {
             base->getWritableType().updateImplicitArraySize(indexValue + 1);
+            base->getWritableType().setImplicitlySized(true);
+            if (base->getQualifier().builtIn == EbvClipDistance &&
+                indexValue >= resources.maxClipDistances) {
+                error(loc, "gl_ClipDistance", "[", "array index out of range '%d'", indexValue);
+            }
+            else if (base->getQualifier().builtIn == EbvCullDistance &&
+                indexValue >= resources.maxCullDistances) {
+                error(loc, "gl_CullDistance", "[", "array index out of range '%d'", indexValue);
+            }
             // For 2D per-view builtin arrays, update the inner dimension size in parent type
             if (base->getQualifier().isPerView() && base->getQualifier().builtIn != EbvNone) {
                 TIntermBinary* binaryNode = base->getAsBinaryNode();
@@ -836,12 +841,16 @@
     } else if (language == EShLangMesh) {
         unsigned int maxPrimitives =
             intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
-        if (qualifier.builtIn == EbvPrimitiveIndicesNV || qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT ||
-            qualifier.builtIn == EbvPrimitiveLineIndicesEXT || qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
+        if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
             expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
             str = "max_primitives*";
             str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
         }
+        else if (qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT || qualifier.builtIn == EbvPrimitiveLineIndicesEXT ||
+                 qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
+            expectedSize = maxPrimitives;
+            str = "max_primitives";
+        }
         else if (qualifier.isPerPrimitive()) {
             expectedSize = maxPrimitives;
             str = "max_primitives";
@@ -1022,14 +1031,22 @@
             inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
         } 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());
+            while (baseSymbol->getAsSymbolNode() == nullptr) {
+                auto binaryNode = baseSymbol->getAsBinaryNode();
+                if (binaryNode == nullptr) break;
+                baseSymbol = binaryNode->getLeft();
+            }
+            if (baseSymbol->getAsSymbolNode() != nullptr) {
+                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, "no such field in structure", field.c_str(), "");
+            }
         }
     } else
-        error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString(intermediate.getEnhancedMsgs()).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())
@@ -1161,7 +1178,7 @@
     if (symbol && builtIn && function.getBuiltInOp() == EOpSpirvInst)
         symbol = nullptr;
 #endif
-    const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0;
+    const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
     if (prevDec) {
         if (prevDec->isPrototyped() && prototype)
             profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function");
@@ -1385,7 +1402,8 @@
 #endif
                     const TType& argType = arg->getAsTyped()->getType();
                     const TQualifier& argQualifier = argType.getQualifier();
-                    if (argQualifier.isMemory() && (argType.containsOpaque() || argType.isReference())) {
+                    bool containsBindlessSampler = intermediate.getBindlessMode() && argType.containsSampler();
+                    if (argQualifier.isMemory() && !containsBindlessSampler && (argType.containsOpaque() || argType.isReference())) {
                         const char* message = "argument cannot drop memory qualifier when passed to formal parameter";
 #ifndef GLSLANG_WEB
                         if (argQualifier.volatil && ! formalQualifier.volatil)
@@ -1671,9 +1689,13 @@
             error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
             branch = intermediate.addBranch(EOpReturn, value, loc);
         }
-    } else
+    } else {
+        if (value->getType().isTexture() || value->getType().isImage()) {
+            if (!extensionTurnedOn(E_GL_ARB_bindless_texture))
+                error(loc, "sampler or image can be used as return type only when the extension GL_ARB_bindless_texture enabled", "return", "");
+        }
         branch = intermediate.addBranch(EOpReturn, value, loc);
-
+    }
     branch->updatePrecision(currentFunctionType->getQualifier().precision);
     return branch;
 }
@@ -1924,6 +1946,9 @@
     if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference())
         requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "+= and -= on a buffer reference");
 
+    if (op == EOpAssign && left->getBasicType() == EbtSampler && right->getBasicType() == EbtSampler)
+        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler assignment for bindless texture");
+
     return intermediate.addAssign(op, left, right, loc);
 }
 
@@ -2356,6 +2381,79 @@
         }
         break;
 
+    case EOpHitObjectTraceRayNV:
+        if (!(*argp)[11]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "payload number", "");
+        else {
+            unsigned int location = (*argp)[11]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0)
+                error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectTraceRayMotionNV:
+        if (!(*argp)[12]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "payload number", "");
+        else {
+            unsigned int location = (*argp)[12]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0)
+                error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectExecuteShaderNV:
+        if (!(*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "payload number", "");
+        else {
+            unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0)
+                error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectRecordHitNV:
+        if (!(*argp)[12]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "hitobjectattribute number", "");
+        else {
+            unsigned int location = (*argp)[12]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0)
+                error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectRecordHitMotionNV:
+        if (!(*argp)[13]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "hitobjectattribute number", "");
+        else {
+            unsigned int location = (*argp)[13]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0)
+                error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectRecordHitWithIndexNV:
+        if (!(*argp)[11]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "hitobjectattribute number", "");
+        else {
+            unsigned int location = (*argp)[11]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0)
+                error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectRecordHitWithIndexMotionNV:
+        if (!(*argp)[12]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "hitobjectattribute number", "");
+        else {
+            unsigned int location = (*argp)[12]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0)
+                error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location);
+        }
+        break;
+    case EOpHitObjectGetAttributesNV:
+        if (!(*argp)[1]->getAsConstantUnion())
+            error(loc, "argument must be compile-time constant", "hitobjectattribute number", "");
+        else {
+            unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
+            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(2, location) < 0)
+                error(loc, "with layout(location =", "no hitObjectAttributeNV declared", "%d)", location);
+        }
+        break;
+
     case EOpRayQueryGetIntersectionType:
     case EOpRayQueryGetIntersectionT:
     case EOpRayQueryGetIntersectionInstanceCustomIndex:
@@ -2369,6 +2467,7 @@
     case EOpRayQueryGetIntersectionObjectRayOrigin:
     case EOpRayQueryGetIntersectionObjectToWorld:
     case EOpRayQueryGetIntersectionWorldToObject:
+    case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:
         if (!(*argp)[1]->getAsConstantUnion())
             error(loc, "argument must be compile-time constant", "committed", "");
         break;
@@ -2807,6 +2906,14 @@
         profileRequires(loc, EEsProfile, 300, nullptr, "arrayed constructor");
     }
 
+    // Reuse EOpConstructTextureSampler for bindless image constructor
+    // uvec2 imgHandle;
+    // imageLoad(image1D(imgHandle), 0);
+    if (type.isImage() && extensionTurnedOn(E_GL_ARB_bindless_texture))
+    {
+        intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc);
+    }
+
     TOperator op = intermediate.mapTypeToConstructorOp(type);
 
     if (op == EOpNull) {
@@ -3136,7 +3243,7 @@
             ppWarn(loc, "\"defined\" is (un)defined:", op,  identifier);
         else
             ppError(loc, "\"defined\" can't be (un)defined:", op,  identifier);
-    else if (strstr(identifier, "__") != 0 && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) {
+    else if (strstr(identifier, "__") != nullptr && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) {
         // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "__".
         if (isEsProfile() && version >= 300 &&
             (strcmp(identifier, "__LINE__") == 0 ||
@@ -3540,8 +3647,13 @@
         return true;
     }
     if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) {
-        error(loc, "cannot convert a sampler", constructorString.c_str(), "");
-        return true;
+        if (op == EOpConstructUVec2 && extensionTurnedOn(E_GL_ARB_bindless_texture)) {
+            intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc);
+        }
+        else {
+            error(loc, "cannot convert a sampler", constructorString.c_str(), "");
+            return true;
+        }
     }
     if (op != EOpConstructStruct && typed->isAtomic()) {
         error(loc, "cannot convert an atomic_uint", constructorString.c_str(), "");
@@ -3561,6 +3673,26 @@
 {
     TString constructorName = function.getType().getBasicTypeString();  // TODO: performance: should not be making copy; interface needs to change
     const char* token = constructorName.c_str();
+    // verify the constructor for bindless texture, the input must be ivec2 or uvec2
+    if (function.getParamCount() == 1) {
+        TType* pType = function[0].type;
+        TBasicType basicType = pType->getBasicType();
+        bool isIntegerVec2 = ((basicType == EbtUint || basicType == EbtInt) && pType->getVectorSize() == 2);
+        bool bindlessMode = extensionTurnedOn(E_GL_ARB_bindless_texture);
+        if (isIntegerVec2 && bindlessMode) {
+            if (pType->getSampler().isImage())
+                intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc);
+            else
+                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc);
+            return false;
+        } else {
+            if (!bindlessMode)
+                error(loc, "sampler-constructor requires the extension GL_ARB_bindless_texture enabled", token, "");
+            else
+                error(loc, "sampler-constructor requires the input to be ivec2 or uvec2", token, "");
+            return true;
+        }
+    }
 
     // exactly two arguments needed
     if (function.getParamCount() != 2) {
@@ -3656,13 +3788,35 @@
     if (type.getQualifier().storage == EvqUniform)
         return;
 
-    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler))
-        error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str());
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler)) {
+        // For bindless texture, sampler can be declared as an struct member
+        if (extensionTurnedOn(E_GL_ARB_bindless_texture)) {
+            if (type.getSampler().isImage())
+                intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar);
+            else
+                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar);
+        }
+        else {
+            error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str());
+        }
+    }
     else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform) {
-        // non-uniform sampler
-        // not yet:  okay if it has an initializer
-        // if (! initializer)
-        error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
+        // For bindless texture, sampler can be declared as an input/output/block member
+        if (extensionTurnedOn(E_GL_ARB_bindless_texture)) {
+            if (type.getSampler().isImage())
+                intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar);
+            else
+                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar);
+        }
+        else {
+            // non-uniform sampler
+            // not yet:  okay if it has an initializer
+            // if (! initializer)
+            if (type.getSampler().isAttachmentEXT() && type.getQualifier().storage != EvqTileImageEXT)
+                 error(loc, "can only be used in tileImageEXT variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
+             else if (type.getQualifier().storage != EvqTileImageEXT)
+                 error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
+        }
     }
 }
 
@@ -3728,7 +3882,7 @@
 //
 // Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level.
 //
-void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier, bool isMemberCheck)
+void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier, bool isMemberCheck, const TPublicType* publicType)
 {
     bool nonuniformOkay = false;
 
@@ -3764,6 +3918,11 @@
         {
             requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "default std430 layout for uniform");
         }
+
+        if (publicType != nullptr && publicType->isImage() &&
+            (qualifier.layoutFormat > ElfExtSizeGuard && qualifier.layoutFormat < ElfCount))
+            qualifier.layoutFormat = mapLegacyLayoutFormat(qualifier.layoutFormat, publicType->sampler.getBasicType());
+
         break;
     default:
         break;
@@ -3824,8 +3983,10 @@
         return;
     }
 
-    if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble)
-        profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output");
+    if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble) {
+        profileRequires(loc, EEsProfile, 300, nullptr, "non-float shader input/output");
+        profileRequires(loc, ~EEsProfile, 130, nullptr, "non-float shader input/output");
+    }
 
     if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV() && !qualifier.isPervertexEXT()) {
         if (isTypeInt(publicType.basicType) ||
@@ -3856,7 +4017,7 @@
         switch (language) {
         case EShLangVertex:
             if (publicType.basicType == EbtStruct) {
-                error(loc, "cannot be a structure or array", GetStorageQualifierString(qualifier.storage), "");
+                error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), "");
                 return;
             }
             if (publicType.arraySizes) {
@@ -4071,7 +4232,7 @@
                 if (dstSpirvDecorate.decorates.find(decorateString.first) != dstSpirvDecorate.decorates.end())
                     error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_string", "(decoration=%u)", decorateString.first);
                 else
-                    dstSpirvDecorate.decorates.insert(decorateString);
+                    dstSpirvDecorate.decorateStrings.insert(decorateString);
             }
         } else {
             dst.spirvDecorate = src.spirvDecorate;
@@ -4168,7 +4329,7 @@
 
 void TParseContext::parameterTypeCheck(const TSourceLoc& loc, TStorageQualifier qualifier, const TType& type)
 {
-    if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque())
+    if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque() && !intermediate.getBindlessMode())
         error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
     if (!parsingBuiltins && type.contains16BitFloat())
         requireFloat16Arithmetic(loc, type.getBasicTypeString().c_str(), "float16 types can only be in uniform block or buffer storage");
@@ -4512,7 +4673,7 @@
 
     // check for additional things allowed by GL_EXT_nonuniform_qualifier
     if (base.getBasicType() == EbtSampler || base.getBasicType() == EbtAccStruct || base.getBasicType() == EbtRayQuery ||
-        (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
+        base.getBasicType() == EbtHitObjectNV || (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
         requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index");
     else
         error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
@@ -5015,6 +5176,7 @@
     case EvqIn:
     case EvqOut:
     case EvqInOut:
+    case EvqTileImageEXT:
         type.getQualifier().storage = qualifier;
         break;
     case EvqGlobal:
@@ -5101,7 +5263,7 @@
 
 void TParseContext::opaqueCheck(const TSourceLoc& loc, const TType& type, const char* op)
 {
-    if (containsFieldWithBasicType(type, EbtSampler))
+    if (containsFieldWithBasicType(type, EbtSampler) && !extensionTurnedOn(E_GL_ARB_bindless_texture))
         error(loc, "can't use with samplers or structs containing samplers", op, "");
 }
 
@@ -5202,7 +5364,7 @@
     bool badInit = false;
     if (! init || ! init->getAsAggregate() || init->getAsAggregate()->getSequence().size() != 1)
         badInit = true;
-    TIntermBinary* binaryInit = 0;
+    TIntermBinary* binaryInit = nullptr;
     if (! badInit) {
         // get the declaration assignment
         binaryInit = init->getAsAggregate()->getSequence()[0]->getAsBinaryNode();
@@ -5476,6 +5638,28 @@
         intermediate.setUsePhysicalStorageBuffer();
         return;
     }
+    if (id == "bindless_sampler") {
+        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_sampler");
+        publicType.qualifier.layoutBindlessSampler = true;
+        intermediate.setBindlessTextureMode(currentCaller, AstRefTypeLayout);
+        return;
+    }
+    if (id == "bindless_image") {
+        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_image");
+        publicType.qualifier.layoutBindlessImage = true;
+        intermediate.setBindlessImageMode(currentCaller, AstRefTypeLayout);
+        return;
+    }
+    if (id == "bound_sampler") {
+        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bound_sampler");
+        publicType.qualifier.layoutBindlessSampler = false;
+        return;
+    }
+    if (id == "bound_image") {
+        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bound_image");
+        publicType.qualifier.layoutBindlessImage = false;
+        return;
+    }
     if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMesh) {
         if (id == TQualifier::getGeometryString(ElgTriangles)) {
             publicType.shaderQualifiers.geometry = ElgTriangles;
@@ -5600,6 +5784,22 @@
             publicType.shaderQualifiers.postDepthCoverage = true;
             return;
         }
+        /* id is transformed into lower case in the beginning of this function. */
+        if (id == "non_coherent_color_attachment_readext") {
+            requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_color_attachment_readEXT");
+            publicType.shaderQualifiers.nonCoherentColorAttachmentReadEXT = true;
+            return;
+        }
+        if (id == "non_coherent_depth_attachment_readext") {
+            requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_depth_attachment_readEXT");
+            publicType.shaderQualifiers.nonCoherentDepthAttachmentReadEXT = true;
+            return;
+        }
+        if (id == "non_coherent_stencil_attachment_readext") {
+            requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_stencil_attachment_readEXT");
+            publicType.shaderQualifiers.nonCoherentStencilAttachmentReadEXT = true;
+            return;
+        }
         for (TLayoutDepth depth = (TLayoutDepth)(EldNone + 1); depth < EldCount; depth = (TLayoutDepth)(depth+1)) {
             if (id == TQualifier::getLayoutDepthString(depth)) {
                 requireProfile(loc, ECoreProfile | ECompatibilityProfile, "depth layout qualifier");
@@ -5670,6 +5870,10 @@
                 }
                 publicType.qualifier.layoutShaderRecord = true;
                 return;
+            } else if (id == "hitobjectshaderrecordnv") {
+                requireExtensions(loc, 1, &E_GL_NV_shader_invocation_reorder, "hitobject shader record NV");
+                publicType.qualifier.layoutHitObjectShaderRecordNV = true;
+                return;
             }
 
         }
@@ -5973,8 +6177,14 @@
         if (id == "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", "");
+            int max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? resources.maxMeshOutputVerticesEXT
+                                                              : resources.maxMeshOutputVerticesNV;
+            if (value > max) {
+                TString maxsErrtring = "too large, must be less than ";
+                maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? "gl_MaxMeshOutputVerticesEXT"
+                                                                            : "gl_MaxMeshOutputVerticesNV");
+                error(loc, maxsErrtring.c_str(), "max_vertices", "");
+            }
             if (nonLiteral)
                 error(loc, "needs a literal integer", "max_vertices", "");
             return;
@@ -5982,8 +6192,14 @@
         if (id == "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", "");
+            int max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? resources.maxMeshOutputPrimitivesEXT
+                                                              : resources.maxMeshOutputPrimitivesNV;
+            if (value > max) {
+                TString maxsErrtring = "too large, must be less than ";
+                maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? "gl_MaxMeshOutputPrimitivesEXT"
+                                                                            : "gl_MaxMeshOutputPrimitivesNV");
+                error(loc, maxsErrtring.c_str(), "max_primitives", "");
+            }
             if (nonLiteral)
                 error(loc, "needs a literal integer", "max_primitives", "");
             return;
@@ -5999,7 +6215,7 @@
             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, 310, nullptr, "gl_WorkGroupSize");
                 profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
             }
 #endif
@@ -6121,10 +6337,16 @@
             dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
         if (src.layoutShaderRecord)
             dst.layoutShaderRecord = true;
+        if (src.layoutBindlessSampler)
+            dst.layoutBindlessSampler = true;
+        if (src.layoutBindlessImage)
+            dst.layoutBindlessImage = true;
         if (src.pervertexNV)
             dst.pervertexNV = true;
         if (src.pervertexEXT)
             dst.pervertexEXT = true;
+        if (src.layoutHitObjectShaderRecordNV)
+            dst.layoutHitObjectShaderRecordNV = true;
 #endif
     }
 }
@@ -6272,6 +6494,8 @@
         case EvqBuffer:
             if (type.getBasicType() == EbtBlock)
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
+            else if (type.getBasicType() == EbtSampler && type.getSampler().isAttachmentEXT())
+                error(loc, "only applies to", "location", "%s with storage tileImageEXT", type.getBasicTypeString().c_str());
             break;
         case EvqtaskPayloadSharedEXT:
             error(loc, "cannot apply to taskPayloadSharedEXT", "location", "");
@@ -6282,8 +6506,11 @@
         case EvqHitAttr:
         case EvqCallableData:
         case EvqCallableDataIn:
+        case EvqHitObjectAttrNV:
             break;
 #endif
+        case EvqTileImageEXT:
+            break;
         default:
             error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", "");
             break;
@@ -6293,10 +6520,10 @@
         int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision);
         if (repeated >= 0 && ! typeCollision)
             error(loc, "overlapping use of location", "location", "%d", repeated);
-        // "fragment-shader outputs ... if two variables are placed within the same
+        // "fragment-shader outputs/tileImageEXT ... if two variables are placed within the same
         // location, they must have the same underlying type (floating-point or integer)"
-        if (typeCollision && language == EShLangFragment && qualifier.isPipeOutput())
-            error(loc, "fragment outputs sharing the same location must be the same basic type", "location", "%d", repeated);
+        if (typeCollision && language == EShLangFragment && (qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT))
+            error(loc, "fragment outputs or tileImageEXTs sharing the same location", "location", "%d must be the same basic type", repeated);
     }
 
 #ifndef GLSLANG_WEB
@@ -6380,7 +6607,7 @@
                        !qualifier.hasAttachment() &&
                        !qualifier.hasBufferReference())
                     error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
-                else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler)
+                else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler && !type.getSampler().isAttachmentEXT())
                     error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
             }
         }
@@ -6402,7 +6629,7 @@
 
     // Image format
     if (qualifier.hasFormat()) {
-        if (! type.isImage())
+        if (! type.isImage() && !intermediate.getBindlessImageMode())
             error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
         else {
             if (type.getSampler().type == EbtFloat && qualifier.getFormat() > ElfFloatGuard)
@@ -6421,7 +6648,7 @@
                 }
             }
         }
-    } else if (type.isImage() && ! qualifier.isWriteOnly()) {
+    } else if (type.isImage() && ! qualifier.isWriteOnly() && !intermediate.getBindlessImageMode()) {
         const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier";
         requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
@@ -6442,6 +6669,8 @@
 
     // input attachment
     if (type.isSubpass()) {
+        if (extensionTurnedOn(E_GL_EXT_shader_tile_image))
+	    error(loc, "can not be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(), "");
         if (! qualifier.hasAttachment())
             error(loc, "requires an input_attachment_index layout qualifier", "subpass", "");
     } else {
@@ -6609,6 +6838,14 @@
             error(loc, "cannot be used with shaderRecordNV", "set", "");
 
     }
+
+    if (qualifier.storage == EvqTileImageEXT) {
+        if (qualifier.hasSet())
+            error(loc, "cannot be used with tileImageEXT", "set", "");
+        if (!qualifier.hasLocation())
+            error(loc, "can only be used with an explicit location", "tileImageEXT", "");
+    }
+
     if (qualifier.storage == EvqHitAttr && qualifier.hasLayout()) {
         error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", "");
     }
@@ -6648,6 +6885,12 @@
         error(loc, message, "early_fragment_tests", "");
     if (shaderQualifiers.postDepthCoverage)
         error(loc, message, "post_depth_coverage", "");
+    if (shaderQualifiers.nonCoherentColorAttachmentReadEXT)
+        error(loc, message, "non_coherent_color_attachment_readEXT", "");
+    if (shaderQualifiers.nonCoherentDepthAttachmentReadEXT)
+        error(loc, message, "non_coherent_depth_attachment_readEXT", "");
+    if (shaderQualifiers.nonCoherentStencilAttachmentReadEXT)
+        error(loc, message, "non_coherent_stencil_attachment_readEXT", "");
     if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
         if (language == EShLangMesh)
             error(loc, message, "max_primitives", "");
@@ -7066,7 +7309,7 @@
             realFunc.addParameter(TParameter().copyParam((*function)[i]));
         }
 
-        TParameter tmpP = { 0, &uintType };
+        TParameter tmpP = { nullptr, &uintType };
         realFunc.addParameter(TParameter().copyParam(tmpP));
         arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true));
 
@@ -7083,7 +7326,7 @@
             realFunc.addParameter(TParameter().copyParam((*function)[i]));
         }
 
-        TParameter tmpP = { 0, &uintType };
+        TParameter tmpP = { nullptr, &uintType };
         realFunc.addParameter(TParameter().copyParam(tmpP));
         arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true));
 
@@ -7237,7 +7480,10 @@
     if (initializer) {
         if (type.getBasicType() == EbtRayQuery) {
             error(loc, "ray queries can only be initialized by using the rayQueryInitializeEXT intrinsic:", "=", identifier.c_str());
+        } else if (type.getBasicType() == EbtHitObjectNV) {
+            error(loc, "hit objects cannot be initialized using initializers", "=", identifier.c_str());
         }
+
     }
 
     if (type.isCoopMat()) {
@@ -7729,12 +7975,14 @@
     // Combined texture-sampler constructors are completely semantic checked
     // in constructorTextureSamplerError()
     if (op == EOpConstructTextureSampler) {
-        if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) {
-            // Transfer depth into the texture (SPIR-V image) type, as a hint
-            // for tools to know this texture/image is a depth image.
-            aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true;
+        if (aggrNode != nullptr) {
+            if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) {
+                // Transfer depth into the texture (SPIR-V image) type, as a hint
+                // for tools to know this texture/image is a depth image.
+                aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true;
+            }
+            return intermediate.setAggregateOperator(aggrNode, op, type, loc);
         }
-        return intermediate.setAggregateOperator(aggrNode, op, type, loc);
     }
 
     TTypeList::const_iterator memberTypes;
@@ -7869,6 +8117,16 @@
             TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node,
                 type);
             return newNode;
+        } else if (node->getType().getBasicType() == EbtSampler) {
+            requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler conversion to uvec2");
+            // force the basic type of the constructor param to uvec2, otherwise spv builder will
+            // report some errors
+            TIntermTyped* newSrcNode = intermediate.createConversion(EbtUint, node);
+            newSrcNode->getAsTyped()->getWritableType().setVectorSize(2);
+
+            TIntermTyped* newNode =
+                intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructUVec2, false, newSrcNode, type);
+            return newNode;
         }
     case EOpConstructUVec3:
     case EOpConstructUVec4:
@@ -7882,7 +8140,15 @@
     case EOpConstructBool:
         basicOp = EOpConstructBool;
         break;
-
+    case EOpConstructTextureSampler:
+        if ((node->getType().getBasicType() == EbtUint || node->getType().getBasicType() == EbtInt) &&
+            node->getType().getVectorSize() == 2) {
+            requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "ivec2/uvec2 convert to texture handle");
+            // No matter ivec2 or uvec2, Set EOpPackUint2x32 just to generate an opBitcast op code
+            TIntermTyped* newNode =
+                intermediate.addBuiltInFunctionCall(node->getLoc(), EOpPackUint2x32, true, node, type);
+            return newNode;
+        }
 #ifndef GLSLANG_WEB
 
     case EOpConstructDVec2:
@@ -8230,6 +8496,30 @@
 }
 
 //
+// Update qualifier layoutBindlessImage & layoutBindlessSampler on block member
+//
+void TParseContext::updateBindlessQualifier(TType& memberType)
+{
+    if (memberType.containsSampler()) {
+        if (memberType.isStruct()) {
+            TTypeList* typeList = memberType.getWritableStruct();
+            for (unsigned int member = 0; member < typeList->size(); ++member) {
+                TType* subMemberType = (*typeList)[member].type;
+                updateBindlessQualifier(*subMemberType);
+            }
+        }
+        else if (memberType.getSampler().isImage()) {
+            intermediate.setBindlessImageMode(currentCaller, AstRefTypeLayout);
+            memberType.getQualifier().layoutBindlessImage = true;
+        }
+        else {
+            intermediate.setBindlessTextureMode(currentCaller, AstRefTypeLayout);
+            memberType.getQualifier().layoutBindlessSampler = true;
+        }
+    }
+}
+
+//
 // Do everything needed to add an interface block.
 //
 void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName,
@@ -8281,8 +8571,13 @@
             }
         }
 
-        if (memberType.containsOpaque())
-            error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), "");
+        // For bindless texture, sampler can be declared as uniform/storage block member,
+        if (memberType.containsOpaque()) {
+            if (memberType.containsSampler() && extensionTurnedOn(E_GL_ARB_bindless_texture))
+                updateBindlessQualifier(memberType);
+            else
+                error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), "");
+            }
 
         if (memberType.containsCoopMat())
             error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), "");
@@ -8615,6 +8910,10 @@
         profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataInNV block");
         requireStage(loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV block");
         break;
+    case EvqHitObjectAttrNV:
+        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV block");
+        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask), "hitObjectAttributeNV block");
+        break;
 #endif
     default:
         error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
@@ -8771,7 +9070,8 @@
             // "The specified offset must be a multiple
             // of the base alignment of the type of the block member it qualifies, or a compile-time error results."
             if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment))
-                error(memberLoc, "must be a multiple of the member's alignment", "offset", "");
+                error(memberLoc, "must be a multiple of the member's alignment", "offset",
+                    "(layout offset = %d | member alignment = %d)", memberQualifier.layoutOffset, memberAlignment);
 
             // GLSL: "It is a compile-time error to specify an offset that is smaller than the offset of the previous
             // member in the block or that lies within the previous member of the block"
@@ -9200,6 +9500,24 @@
         else
             error(loc, "can only apply to 'in'", "post_coverage_coverage", "");
     }
+    if (publicType.shaderQualifiers.nonCoherentColorAttachmentReadEXT) {
+        if (publicType.qualifier.storage == EvqVaryingIn)
+            intermediate.setNonCoherentColorAttachmentReadEXT();
+        else
+            error(loc, "can only apply to 'in'", "non_coherent_color_attachment_readEXT", "");
+    }
+    if (publicType.shaderQualifiers.nonCoherentDepthAttachmentReadEXT) {
+        if (publicType.qualifier.storage == EvqVaryingIn)
+            intermediate.setNonCoherentDepthAttachmentReadEXT();
+        else
+            error(loc, "can only apply to 'in'", "non_coherent_depth_attachment_readEXT", "");
+    }
+    if (publicType.shaderQualifiers.nonCoherentStencilAttachmentReadEXT) {
+        if (publicType.qualifier.storage == EvqVaryingIn)
+            intermediate.setNonCoherentStencilAttachmentReadEXT();
+        else
+            error(loc, "can only apply to 'in'", "non_coherent_stencil_attachment_readEXT", "");
+    }
     if (publicType.shaderQualifiers.hasBlendEquation()) {
         if (publicType.qualifier.storage != EvqVaryingOut)
             error(loc, "can only apply to 'out'", "blend equation", "");
@@ -9456,4 +9774,38 @@
     return originStruct;
 }
 
+TLayoutFormat TParseContext::mapLegacyLayoutFormat(TLayoutFormat legacyLayoutFormat, TBasicType imageType)
+{
+    TLayoutFormat layoutFormat = ElfNone;
+    if (imageType == EbtFloat) {
+        switch (legacyLayoutFormat) {
+        case ElfSize1x16: layoutFormat = ElfR16f; break;
+        case ElfSize1x32: layoutFormat = ElfR32f; break;
+        case ElfSize2x32: layoutFormat = ElfRg32f; break;
+        case ElfSize4x32: layoutFormat = ElfRgba32f; break;
+        default: break;
+        }
+    } else if (imageType == EbtUint) {
+        switch (legacyLayoutFormat) {
+        case ElfSize1x8: layoutFormat = ElfR8ui; break;
+        case ElfSize1x16: layoutFormat = ElfR16ui; break;
+        case ElfSize1x32: layoutFormat = ElfR32ui; break;
+        case ElfSize2x32: layoutFormat = ElfRg32ui; break;
+        case ElfSize4x32: layoutFormat = ElfRgba32ui; break;
+        default: break;
+        }
+    } else if (imageType == EbtInt) {
+        switch (legacyLayoutFormat) {
+        case ElfSize1x8: layoutFormat = ElfR8i; break;
+        case ElfSize1x16: layoutFormat = ElfR16i; break;
+        case ElfSize1x32: layoutFormat = ElfR32i; break;
+        case ElfSize2x32: layoutFormat = ElfRg32i; break;
+        case ElfSize4x32: layoutFormat = ElfRgba32i; break;
+        default: break;
+        }
+    }
+
+    return layoutFormat;
+}
+
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 885fd90..66795fd 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -95,6 +95,10 @@
             globalUniformSet(TQualifier::layoutSetEnd),
             atomicCounterBlockSet(TQualifier::layoutSetEnd)
     {
+        // use storage buffer on SPIR-V 1.3 and up
+        if (spvVersion.spv >= EShTargetSpv_1_3)
+            intermediate.setUseStorageBuffer();
+
         if (entryPoint != nullptr)
             sourceEntryPointName = *entryPoint;
     }
@@ -393,7 +397,7 @@
     void accStructCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void memberQualifierCheck(glslang::TPublicType&);
-    void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false);
+    void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false, const TPublicType* publicType = nullptr);
     void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&);
     bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType);
     void mergeQualifiers(const TSourceLoc&, TQualifier& dst, const TQualifier& src, bool force);
@@ -438,12 +442,12 @@
     const TFunction* findFunction400(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     const TFunction* findFunctionExplicitTypes(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
     void declareTypeDefaults(const TSourceLoc&, const TPublicType&);
-    TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
+    TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TPublicType&, TArraySizes* typeArray = nullptr, TIntermTyped* initializer = nullptr);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
     TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset);
     void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to);
-    void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0);
+    void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = nullptr, TArraySizes* arraySizes = nullptr);
     void blockStorageRemap(const TSourceLoc&, const TString*, TQualifier&);
     void blockStageIoCheck(const TSourceLoc&, const TQualifier&);
     void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName);
@@ -456,9 +460,11 @@
     void addQualifierToExisting(const TSourceLoc&, TQualifier, TIdentifierList&);
     void invariantCheck(const TSourceLoc&, const TQualifier&);
     void updateStandaloneQualifierDefaults(const TSourceLoc&, const TPublicType&);
+    void updateBindlessQualifier(TType& memberType);
     void wrapupSwitchSubsequence(TIntermAggregate* statements, TIntermNode* branchNode);
     TIntermNode* addSwitch(const TSourceLoc&, TIntermTyped* expression, TIntermAggregate* body);
     const TTypeList* recordStructCopy(TStructRecord&, const TType*, const TType*);
+    TLayoutFormat mapLegacyLayoutFormat(TLayoutFormat legacyLayoutFormat, TBasicType imageType);
 
 #ifndef GLSLANG_WEB
     TAttributeType attributeFromName(const TString& name) const;
@@ -480,6 +486,7 @@
     TSpirvRequirement* mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1,
                                                 TSpirvRequirement* spirvReq2);
     TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant);
+    TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TPublicType& type);
     TSpirvTypeParameters* mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1,
                                                    TSpirvTypeParameters* spirvTypeParams2);
     TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value);
diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp
index 84c40f4..c3a3928 100644
--- a/glslang/MachineIndependent/PoolAlloc.cpp
+++ b/glslang/MachineIndependent/PoolAlloc.cpp
@@ -267,8 +267,8 @@
         //
         size_t numBytesToAlloc = allocationSize + headerSkip;
         tHeader* memory = reinterpret_cast<tHeader*>(::new char[numBytesToAlloc]);
-        if (memory == 0)
-            return 0;
+        if (memory == nullptr)
+            return nullptr;
 
         // Use placement-new to initialize header
         new(memory) tHeader(inUseList, (numBytesToAlloc + pageSize - 1) / pageSize);
@@ -289,8 +289,8 @@
         freeList = freeList->nextPage;
     } else {
         memory = reinterpret_cast<tHeader*>(::new char[pageSize]);
-        if (memory == 0)
-            return 0;
+        if (memory == nullptr)
+            return nullptr;
     }
 
     // Use placement-new to initialize header
@@ -308,7 +308,7 @@
 //
 void TAllocation::checkAllocList() const
 {
-    for (const TAllocation* alloc = this; alloc != 0; alloc = alloc->prevAlloc)
+    for (const TAllocation* alloc = this; alloc != nullptr; alloc = alloc->prevAlloc)
         alloc->check();
 }
 
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 7f51173..bb21c20 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -343,6 +343,7 @@
 
     (*KeywordMap)["const"] =                   CONST;
     (*KeywordMap)["uniform"] =                 UNIFORM;
+    (*KeywordMap)["tileImageEXT"] =            TILEIMAGEEXT;
     (*KeywordMap)["buffer"] =                  BUFFER;
     (*KeywordMap)["in"] =                      IN;
     (*KeywordMap)["out"] =                     OUT;
@@ -685,6 +686,10 @@
     (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
     (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
 
+    (*KeywordMap)["attachmentEXT"] =           ATTACHMENTEXT;
+    (*KeywordMap)["iattachmentEXT"] =          IATTACHMENTEXT;
+    (*KeywordMap)["uattachmentEXT"] =          UATTACHMENTEXT;
+
     (*KeywordMap)["subpassInput"] =            SUBPASSINPUT;
     (*KeywordMap)["subpassInputMS"] =          SUBPASSINPUTMS;
     (*KeywordMap)["isubpassInput"] =           ISUBPASSINPUT;
@@ -765,6 +770,9 @@
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
     (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
 
+    (*KeywordMap)["hitObjectNV"] =             HITOBJECTNV;
+    (*KeywordMap)["hitObjectAttributeNV"] =    HITOBJECTATTRNV;
+
     ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
 
     ReservedSet->insert("common");
@@ -939,6 +947,7 @@
     switch (keyword) {
     case CONST:
     case UNIFORM:
+    case TILEIMAGEEXT:
     case IN:
     case OUT:
     case INOUT:
@@ -1655,6 +1664,9 @@
     case ISUBPASSINPUTMS:
     case USUBPASSINPUT:
     case USUBPASSINPUTMS:
+    case ATTACHMENTEXT:
+    case IATTACHMENTEXT:
+    case UATTACHMENTEXT:
         if (parseContext.spvVersion.vulkan > 0)
             return keyword;
         else
@@ -1789,6 +1801,20 @@
             parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
             return keyword;
         return identifierOrType();
+
+    case HITOBJECTNV:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (!parseContext.isEsProfile() && parseContext.version >= 460
+                 && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
+            return keyword;
+        return identifierOrType();
+
+    case HITOBJECTATTRNV:
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            (!parseContext.isEsProfile() && parseContext.version >= 460
+                 && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
+            return keyword;
+        return identifierOrType();
 #endif
 
     default:
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 57e3423..5d16361 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -298,9 +298,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
@@ -322,9 +319,6 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
@@ -371,7 +365,6 @@
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
                                    infoSink, commonTable, symbolTables);
 
-#ifndef GLSLANG_ANGLE
     // check for ray tracing stages
     if (profile != EEsProfile && version >= 450) {
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
@@ -399,7 +392,6 @@
         (profile == EEsProfile && version >= 320))
         InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
                                    infoSink, commonTable, symbolTables);
-#endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
 
     return true;
@@ -502,7 +494,7 @@
 // Function to Print all builtins
 void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     infoSink.debug << "BuiltinSymbolTable {\n";
 
     symbolTable.dump(infoSink, true);
@@ -606,7 +598,7 @@
         break;
     }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     // Correct for stage type...
     switch (stage) {
     case EShLangGeometry:
@@ -884,7 +876,7 @@
                                 : userInput.scanVersion(version, profile, versionNotFirstToken);
     bool versionNotFound = version == 0;
     if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
             (version != defaultVersion || profile != defaultProfile)) {
             compiler->infoSink.info << "Warning, (version, profile) forced to be ("
@@ -910,13 +902,10 @@
 #ifdef GLSLANG_WEB
     profile = EEsProfile;
     version = 310;
-#elif defined(GLSLANG_ANGLE)
-    profile = ECoreProfile;
-    version = 450;
 #endif
 
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     bool warnVersionNotFirst = false;
     if (! versionWillBeError && versionNotFirstToken) {
         if (messages & EShMsgRelaxedErrors)
@@ -989,7 +978,7 @@
     parseContext->setLimits(*resources);
     if (! goodVersion)
         parseContext->addError();
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     if (warnVersionNotFirst) {
         TSourceLoc loc;
         loc.init();
@@ -1027,7 +1016,7 @@
     return success;
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 // Responsible for keeping track of the most recent source string and line in
 // the preprocessor and outputting newlines appropriately if the source string
@@ -1250,16 +1239,14 @@
             parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
         }
 
-#ifndef GLSLANG_ANGLE
         if (messages & EShMsgAST)
             intermediate.output(parseContext.infoSink, true);
-#endif
 
         return success;
     }
 };
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 // Take a single compilation unit, and run the preprocessor on it.
 // Return: True if there were no issues found in preprocessing,
 //         False if during preprocessing any unknown version, pragmas or
@@ -1370,7 +1357,7 @@
 ShHandle ShConstructCompiler(const EShLanguage language, int debugOptions)
 {
     if (!InitThread())
-        return 0;
+        return nullptr;
 
     TShHandleBase* base = static_cast<TShHandleBase*>(ConstructCompiler(language, debugOptions));
 
@@ -1380,7 +1367,7 @@
 ShHandle ShConstructLinker(const EShExecutable executable, int debugOptions)
 {
     if (!InitThread())
-        return 0;
+        return nullptr;
 
     TShHandleBase* base = static_cast<TShHandleBase*>(ConstructLinker(executable, debugOptions));
 
@@ -1390,7 +1377,7 @@
 ShHandle ShConstructUniformMap()
 {
     if (!InitThread())
-        return 0;
+        return nullptr;
 
     TShHandleBase* base = static_cast<TShHandleBase*>(ConstructUniformMap());
 
@@ -1399,7 +1386,7 @@
 
 void ShDestruct(ShHandle handle)
 {
-    if (handle == 0)
+    if (handle == nullptr)
         return;
 
     TShHandleBase* base = static_cast<TShHandleBase*>(handle);
@@ -1432,7 +1419,7 @@
                 for (int source = 0; source < SourceCount; ++source) {
                     for (int stage = 0; stage < EShLangCount; ++stage) {
                         delete SharedSymbolTables[version][spvVersion][p][source][stage];
-                        SharedSymbolTables[version][spvVersion][p][source][stage] = 0;
+                        SharedSymbolTables[version][spvVersion][p][source][stage] = nullptr;
                     }
                 }
             }
@@ -1445,7 +1432,7 @@
                 for (int source = 0; source < SourceCount; ++source) {
                     for (int pc = 0; pc < EPcCount; ++pc) {
                         delete CommonSymbolTable[version][spvVersion][p][source][pc];
-                        CommonSymbolTable[version][spvVersion][p][source][pc] = 0;
+                        CommonSymbolTable[version][spvVersion][p][source][pc] = nullptr;
                     }
                 }
             }
@@ -1488,12 +1475,12 @@
     )
 {
     // Map the generic handle to the C++ object
-    if (handle == 0)
+    if (handle == nullptr)
         return 0;
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(handle);
     TCompiler* compiler = base->getAsCompiler();
-    if (compiler == 0)
+    if (compiler == nullptr)
         return 0;
 
     SetThreadPoolAllocator(compiler->getPool());
@@ -1533,13 +1520,13 @@
     const ShHandle compHandles[],
     const int numHandles)
 {
-    if (linkHandle == 0 || numHandles == 0)
+    if (linkHandle == nullptr || numHandles == 0)
         return 0;
 
     THandleList cObjects;
 
     for (int i = 0; i < numHandles; ++i) {
-        if (compHandles[i] == 0)
+        if (compHandles[i] == nullptr)
             return 0;
         TShHandleBase* base = reinterpret_cast<TShHandleBase*>(compHandles[i]);
         if (base->getAsLinker()) {
@@ -1548,18 +1535,17 @@
         if (base->getAsCompiler())
             cObjects.push_back(base->getAsCompiler());
 
-        if (cObjects[i] == 0)
+        if (cObjects[i] == nullptr)
             return 0;
     }
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(linkHandle);
     TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
 
-    SetThreadPoolAllocator(linker->getPool());
-
-    if (linker == 0)
+    if (linker == nullptr)
         return 0;
-
+    
+    SetThreadPoolAllocator(linker->getPool());
     linker->infoSink.info.erase();
 
     for (int i = 0; i < numHandles; ++i) {
@@ -1582,7 +1568,7 @@
 //
 void ShSetEncryptionMethod(ShHandle handle)
 {
-    if (handle == 0)
+    if (handle == nullptr)
         return;
 }
 
@@ -1591,8 +1577,8 @@
 //
 const char* ShGetInfoLog(const ShHandle handle)
 {
-    if (handle == 0)
-        return 0;
+    if (handle == nullptr)
+        return nullptr;
 
     TShHandleBase* base = static_cast<TShHandleBase*>(handle);
     TInfoSink* infoSink;
@@ -1602,7 +1588,7 @@
     else if (base->getAsLinker())
         infoSink = &(base->getAsLinker()->getInfoSink());
     else
-        return 0;
+        return nullptr;
 
     infoSink->info << infoSink->debug.c_str();
     return infoSink->info.c_str();
@@ -1614,14 +1600,14 @@
 //
 const void* ShGetExecutable(const ShHandle handle)
 {
-    if (handle == 0)
-        return 0;
+    if (handle == nullptr)
+        return nullptr;
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(handle);
 
     TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
-    if (linker == 0)
-        return 0;
+    if (linker == nullptr)
+        return nullptr;
 
     return linker->getObjectCode();
 }
@@ -1636,13 +1622,13 @@
 //
 int ShSetVirtualAttributeBindings(const ShHandle handle, const ShBindingTable* table)
 {
-    if (handle == 0)
+    if (handle == nullptr)
         return 0;
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(handle);
     TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
 
-    if (linker == 0)
+    if (linker == nullptr)
         return 0;
 
     linker->setAppAttributeBindings(table);
@@ -1655,13 +1641,13 @@
 //
 int ShSetFixedAttributeBindings(const ShHandle handle, const ShBindingTable* table)
 {
-    if (handle == 0)
+    if (handle == nullptr)
         return 0;
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(handle);
     TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
 
-    if (linker == 0)
+    if (linker == nullptr)
         return 0;
 
     linker->setFixedAttributeBindings(table);
@@ -1673,12 +1659,12 @@
 //
 int ShExcludeAttributes(const ShHandle handle, int *attributes, int count)
 {
-    if (handle == 0)
+    if (handle == nullptr)
         return 0;
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(handle);
     TLinker* linker = static_cast<TLinker*>(base->getAsLinker());
-    if (linker == 0)
+    if (linker == nullptr)
         return 0;
 
     linker->setExcludedAttributes(attributes, count);
@@ -1694,12 +1680,12 @@
 //
 int ShGetUniformLocation(const ShHandle handle, const char* name)
 {
-    if (handle == 0)
+    if (handle == nullptr)
         return -1;
 
     TShHandleBase* base = reinterpret_cast<TShHandleBase*>(handle);
     TUniformMap* uniformMap= base->getAsUniformMap();
-    if (uniformMap == 0)
+    if (uniformMap == nullptr)
         return -1;
 
     return uniformMap->getLocation(name);
@@ -1927,7 +1913,7 @@
                            &environment);
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 // Fill in a string with the result of preprocessing ShaderStrings
 // Returns true if all extensions, pragmas and version strings were valid.
 //
@@ -1966,15 +1952,15 @@
 }
 
 TProgram::TProgram() :
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
-    reflection(0),
+#if !defined(GLSLANG_WEB)
+    reflection(nullptr),
 #endif
     linked(false)
 {
     pool = new TPoolAllocator;
     infoSink = new TInfoSink;
     for (int s = 0; s < EShLangCount; ++s) {
-        intermediate[s] = 0;
+        intermediate[s] = nullptr;
         newedIntermediate[s] = false;
     }
 }
@@ -1982,7 +1968,7 @@
 TProgram::~TProgram()
 {
     delete infoSink;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     delete reflection;
 #endif
 
@@ -2032,7 +2018,7 @@
     if (stages[stage].size() == 0)
         return true;
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     int numEsShaders = 0, numNonEsShaders = 0;
     for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) {
         if ((*it)->intermediate->getProfile() == EEsProfile) {
@@ -2088,10 +2074,8 @@
 #endif
     intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0);
 
-#ifndef GLSLANG_ANGLE
     if (messages & EShMsgAST)
         intermediate[stage]->output(*infoSink, true);
-#endif
 
     return intermediate[stage]->getNumErrors() == 0;
 }
@@ -2169,7 +2153,7 @@
     return infoSink->debug.c_str();
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 //
 // Reflection implementation.
@@ -2251,6 +2235,6 @@
     return ioMapper->doMap(pResolver, *infoSink);
 }
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/SpirvIntrinsics.cpp b/glslang/MachineIndependent/SpirvIntrinsics.cpp
index 6650f7d..ecef560 100644
--- a/glslang/MachineIndependent/SpirvIntrinsics.cpp
+++ b/glslang/MachineIndependent/SpirvIntrinsics.cpp
@@ -45,6 +45,15 @@
 
 namespace glslang {
 
+bool TSpirvTypeParameter::operator==(const TSpirvTypeParameter& rhs) const
+{
+    if (constant != nullptr)
+        return constant->getConstArray() == rhs.constant->getConstArray();
+
+    assert(type != nullptr);
+    return *type == *rhs.type;
+}
+
 //
 // Handle SPIR-V requirements
 //
@@ -168,7 +177,7 @@
     TVector<const TIntermTyped*> extraOperands;
     for (auto arg : args->getSequence()) {
         auto extraOperand = arg->getAsTyped();
-        assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant());
+        assert(extraOperand != nullptr);
         extraOperands.push_back(extraOperand);
     }
     spirvDecorate->decorateIds[decoration] = extraOperands;
@@ -202,30 +211,29 @@
     const auto appendStr = [&](const char* s) { qualifierString.append(s); };
 
     const auto appendDecorate = [&](const TIntermTyped* constant) {
-        auto& constArray = constant->getAsConstantUnion() != nullptr ? constant->getAsConstantUnion()->getConstArray()
-                                                                     : constant->getAsSymbolNode()->getConstArray();
-        if (constant->getBasicType() == EbtFloat) {
-            float value = static_cast<float>(constArray[0].getDConst());
-            appendFloat(value);
+        if (constant->getAsConstantUnion()) {
+            auto& constArray = constant->getAsConstantUnion()->getConstArray();
+            if (constant->getBasicType() == EbtFloat) {
+                float value = static_cast<float>(constArray[0].getDConst());
+                appendFloat(value);
+            } else if (constant->getBasicType() == EbtInt) {
+                int value = constArray[0].getIConst();
+                appendInt(value);
+            } else if (constant->getBasicType() == EbtUint) {
+                unsigned value = constArray[0].getUConst();
+                appendUint(value);
+            } else if (constant->getBasicType() == EbtBool) {
+                bool value = constArray[0].getBConst();
+                appendBool(value);
+            } else if (constant->getBasicType() == EbtString) {
+                const TString* value = constArray[0].getSConst();
+                appendStr(value->c_str());
+            } else
+                assert(0);
+        } else {
+            assert(constant->getAsSymbolNode());
+            appendStr(constant->getAsSymbolNode()->getName().c_str());
         }
-        else if (constant->getBasicType() == EbtInt) {
-            int value = constArray[0].getIConst();
-            appendInt(value);
-        }
-        else if (constant->getBasicType() == EbtUint) {
-            unsigned value = constArray[0].getUConst();
-            appendUint(value);
-        }
-        else if (constant->getBasicType() == EbtBool) {
-            bool value = constArray[0].getBConst();
-            appendBool(value);
-        }
-        else if (constant->getBasicType() == EbtString) {
-            const TString* value = constArray[0].getSConst();
-            appendStr(value->c_str());
-        }
-        else
-            assert(0);
     };
 
     for (auto& decorate : spirvDecorate->decorates) {
@@ -284,14 +292,19 @@
         constant->getBasicType() != EbtBool &&
         constant->getBasicType() != EbtString)
         error(loc, "this type not allowed", constant->getType().getBasicString(), "");
-    else {
-        assert(constant);
+    else
         spirvTypeParams->push_back(TSpirvTypeParameter(constant));
-    }
 
     return spirvTypeParams;
 }
 
+TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TSourceLoc& loc, const TPublicType& type)
+{
+    TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters;
+    spirvTypeParams->push_back(TSpirvTypeParameter(new TType(type)));
+    return spirvTypeParams;
+}
+
 TSpirvTypeParameters* TParseContext::mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2)
 {
     // Merge SPIR-V type parameters of the second one to the first one
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 2f1b5ac..43f8dbe 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -78,6 +78,7 @@
     case EbtAccStruct:          mangledName += "as";     break;
     case EbtRayQuery:           mangledName += "rq";     break;
     case EbtSpirvType:          mangledName += "spv-t";  break;
+    case EbtHitObjectNV:        mangledName += "ho";     break;
 #endif
     case EbtSampler:
         switch (sampler.type) {
@@ -183,7 +184,7 @@
     }
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 //
 // Dump functions.
@@ -381,7 +382,7 @@
 TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf)
 {
     for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) {
-        TParameter param;
+        TParameter param{};
         parameters.push_back(param);
         (void)parameters.back().copyParam(copyOf.parameters[i]);
     }
@@ -416,7 +417,7 @@
     // copy of the original container.
     assert(0);
 
-    return 0;
+    return nullptr;
 }
 
 TSymbolTableLevel* TSymbolTableLevel::clone() const
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index 2e570bb..c2b386e 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), uniqueId(0), extensions(0), writable(true) { }
+    explicit TSymbol(const TString *n) :  name(n), uniqueId(0), extensions(nullptr), writable(true) { }
     virtual TSymbol* clone() const = 0;
     virtual ~TSymbol() { }  // rely on all symbol owned memory coming from the pool
 
@@ -97,18 +97,18 @@
         changeName(NewPoolTString(newName.c_str()));
     }
     virtual const TString& getMangledName() const { return getName(); }
-    virtual TFunction* getAsFunction() { return 0; }
-    virtual const TFunction* getAsFunction() const { return 0; }
-    virtual TVariable* getAsVariable() { return 0; }
-    virtual const TVariable* getAsVariable() const { return 0; }
-    virtual const TAnonMember* getAsAnonMember() const { return 0; }
+    virtual TFunction* getAsFunction() { return nullptr; }
+    virtual const TFunction* getAsFunction() const { return nullptr; }
+    virtual TVariable* getAsVariable() { return nullptr; }
+    virtual const TVariable* getAsVariable() const { return nullptr; }
+    virtual const TAnonMember* getAsAnonMember() const { return nullptr; }
     virtual const TType& getType() const = 0;
     virtual TType& getWritableType() = 0;
     virtual void setUniqueId(long long id) { uniqueId = id; }
     virtual long long getUniqueId() const { return uniqueId; }
     virtual void setExtensions(int numExts, const char* const exts[])
     {
-        assert(extensions == 0);
+        assert(extensions == nullptr);
         assert(numExts > 0);
         extensions = NewPoolObject(extensions);
         for (int e = 0; e < numExts; ++e)
@@ -117,7 +117,7 @@
     virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); }
     virtual const char** getExtensions() const { return extensions->data(); }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0;
     void dumpExtensions(TInfoSink& infoSink) const;
 #endif
@@ -196,7 +196,7 @@
     }
     virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     virtual void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
 
@@ -229,7 +229,7 @@
         if (param.name)
             name = NewPoolTString(param.name->c_str());
         else
-            name = 0;
+            name = nullptr;
         type = param.type->clone();
         defaultValue = param.defaultValue;
         return *this;
@@ -243,7 +243,7 @@
 class TFunction : public TSymbol {
 public:
     explicit TFunction(TOperator o) :
-        TSymbol(0),
+        TSymbol(nullptr),
         op(o),
         defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), defaultParamCount(0) { }
     TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) :
@@ -319,6 +319,7 @@
 
     virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; }
     virtual const TParameter& operator[](int i) const { return parameters[i]; }
+    const TQualifier& getQualifier() const { return returnType.getQualifier(); }
 
 #ifndef GLSLANG_WEB
     virtual void setSpirvInstruction(const TSpirvInstruction& inst)
@@ -329,7 +330,7 @@
     virtual const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; }
 #endif
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
 #endif
 
@@ -395,7 +396,7 @@
     virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); }
 
     virtual int getAnonId() const { return anonId; }
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     virtual void dump(TInfoSink& infoSink, bool complete = false) const override;
 #endif
 
@@ -411,7 +412,7 @@
 class TSymbolTableLevel {
 public:
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
-    TSymbolTableLevel() : defaultPrecision(0), anonId(0), thisLevel(false) { }
+    TSymbolTableLevel() : defaultPrecision(nullptr), anonId(0), thisLevel(false) { }
     ~TSymbolTableLevel();
 
     bool insert(const TString& name, TSymbol* symbol) {
@@ -493,7 +494,7 @@
     {
         tLevel::const_iterator it = level.find(name);
         if (it == level.end())
-            return 0;
+            return nullptr;
         else
             return (*it).second;
     }
@@ -561,7 +562,7 @@
     {
         // can call multiple times at one scope, will only latch on first call,
         // as we're tracking the previous scope's values, not the current values
-        if (defaultPrecision != 0)
+        if (defaultPrecision != nullptr)
             return;
 
         defaultPrecision = new TPrecisionQualifier[EbtNumTypes];
@@ -573,7 +574,7 @@
     {
         // can be called for table level pops that didn't set the
         // defaults
-        if (defaultPrecision == 0 || p == 0)
+        if (defaultPrecision == nullptr || p == nullptr)
             return;
 
         for (int t = 0; t < EbtNumTypes; ++t)
@@ -582,7 +583,7 @@
 
     void relateToOperator(const char* name, TOperator op);
     void setFunctionExtensions(const char* name, int num, const char* const extensions[]);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
     TSymbolTableLevel* clone() const;
@@ -622,7 +623,7 @@
 
         // don't deallocate levels passed in from elsewhere
         while (table.size() > adoptedLevels)
-            pop(0);
+            pop(nullptr);
     }
 
     void adoptLevels(TSymbolTable& symTable)
@@ -783,7 +784,7 @@
 
     // Normal find of a symbol, that can optionally say whether the symbol was found
     // at a built-in level or the current top-scope level.
-    TSymbol* find(const TString& name, bool* builtIn = 0, bool* currentScope = 0, int* thisDepthP = 0)
+    TSymbol* find(const TString& name, bool* builtIn = nullptr, bool* currentScope = nullptr, int* thisDepthP = nullptr)
     {
         int level = currentLevel();
         TSymbol* symbol;
@@ -827,7 +828,7 @@
                 ++thisDepth;
             symbol = table[level]->find(name);
             --level;
-        } while (symbol == 0 && level >= 0);
+        } while (symbol == nullptr && level >= 0);
 
         if (! table[level + 1]->isThisLevel())
             thisDepth = 0;
@@ -912,7 +913,7 @@
     }
 
     long long getMaxSymbolId() { return uniqueId; }
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     void dump(TInfoSink& infoSink, bool complete = false) const;
 #endif
     void copyTable(const TSymbolTable& copyOf);
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index a5fd107..eae0a59 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -227,6 +227,7 @@
     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_bindless_texture]             = EBhDisable;
     extensionBehavior[E_GL_ARB_fragment_coord_conventions]   = EBhDisable;
 
 
@@ -301,6 +302,11 @@
     extensionBehavior[E_GL_NV_shader_sm_builtins]                    = EBhDisable;
     extensionBehavior[E_GL_NV_integer_cooperative_matrix]            = EBhDisable;
 
+    extensionBehavior[E_GL_NV_shader_invocation_reorder]             = EBhDisable;
+
+    // ARM
+    extensionBehavior[E_GL_ARM_shader_core_builtins]                 = EBhDisable;
+
     // AEP
     extensionBehavior[E_GL_ANDROID_extension_pack_es31a]             = EBhDisable;
     extensionBehavior[E_GL_KHR_blend_equation_advanced]              = EBhDisable;
@@ -348,6 +354,8 @@
     extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
     extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
     extensionBehavior[E_GL_EXT_opacity_micromap]            = EBhDisable;
+    extensionBehavior[E_GL_EXT_ray_tracing_position_fetch]  = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_tile_image]           = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -370,6 +378,9 @@
     extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_atomic_float]                    = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_atomic_float2]                   = EBhDisable;
+
+    // Record extensions not for spv.
+    spvUnsupportedExt.push_back(E_GL_ARB_bindless_texture);
 }
 
 #endif // GLSLANG_WEB
@@ -437,7 +448,6 @@
 
     } else { // !isEsProfile()
         preamble =
-            "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
             "#define GL_ARB_texture_rectangle 1\n"
             "#define GL_ARB_shading_language_420pack 1\n"
             "#define GL_ARB_texture_gather 1\n"
@@ -477,6 +487,7 @@
             "#define GL_ARB_vertex_attrib_64bit 1\n"
             "#define GL_ARB_draw_instanced 1\n"
             "#define GL_ARB_fragment_coord_conventions 1\n"
+            "#define GL_ARB_bindless_texture 1\n"
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
             "#define GL_EXT_shader_image_load_formatted 1\n"
             "#define GL_EXT_post_depth_coverage 1\n"
@@ -513,6 +524,7 @@
             "#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_ray_tracing_position_fetch 1\n"
             "#define GL_EXT_spirv_intrinsics 1\n"
             "#define GL_EXT_mesh_shader 1\n"
 
@@ -544,6 +556,7 @@
             "#define GL_NV_mesh_shader 1\n"
             "#define GL_NV_cooperative_matrix 1\n"
             "#define GL_NV_integer_cooperative_matrix 1\n"
+            "#define GL_NV_shader_invocation_reorder 1\n"
 
             "#define GL_EXT_shader_explicit_arithmetic_types 1\n"
             "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
@@ -576,6 +589,10 @@
             preamble += "#define GL_EXT_null_initializer 1\n";
             preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
         }
+        if (version >= 130) {
+            preamble +="#define GL_FRAGMENT_PRECISION_HIGH 1\n";
+        }
+
 #endif // GLSLANG_WEB
     }
 
@@ -1066,8 +1083,8 @@
     if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
         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");
+        profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_NV_mesh_shader");
+        profileRequires(loc, EEsProfile, 320, nullptr, "#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);
         }
@@ -1075,8 +1092,8 @@
     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");
+        profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_EXT_mesh_shader");
+        profileRequires(loc, EEsProfile, 320, nullptr, "#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);
         }
@@ -1099,6 +1116,13 @@
             minSpvVersion = iter->second;
         requireSpv(loc, extension, minSpvVersion);
     }
+
+    if (spvVersion.spv != 0){
+        for (auto ext : spvUnsupportedExt){
+            if (strcmp(extension, ext.c_str()) == 0)
+                error(loc, "not allowed when using generating SPIR-V codes", extension, "");
+        }
+    }
 }
 
 // Call for any operation needing full GLSL integer data-type support.
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
old mode 100644
new mode 100755
index f06abdd..01b8b5d
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -163,6 +163,7 @@
 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_ARB_bindless_texture             = "GL_ARB_bindless_texture";
 
 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";
@@ -264,6 +265,10 @@
 const char* const E_GL_NV_compute_shader_derivatives            = "GL_NV_compute_shader_derivatives";
 const char* const E_GL_NV_shader_texture_footprint              = "GL_NV_shader_texture_footprint";
 const char* const E_GL_NV_mesh_shader                           = "GL_NV_mesh_shader";
+const char* const E_GL_EXT_ray_tracing_position_fetch           = "GL_EXT_ray_tracing_position_fetch";
+
+// ARM
+const char* const E_GL_ARM_shader_core_builtins                 = "GL_ARM_shader_core_builtins";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -273,6 +278,7 @@
 const char* const E_GL_NV_cooperative_matrix                    = "GL_NV_cooperative_matrix";
 const char* const E_GL_NV_shader_sm_builtins                    = "GL_NV_shader_sm_builtins";
 const char* const E_GL_NV_integer_cooperative_matrix            = "GL_NV_integer_cooperative_matrix";
+const char* const E_GL_NV_shader_invocation_reorder             = "GL_NV_shader_invocation_reorder";
 
 // AEP
 const char* const E_GL_ANDROID_extension_pack_es31a             = "GL_ANDROID_extension_pack_es31a";
@@ -322,6 +328,8 @@
 const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float";
 const char* const E_GL_EXT_shader_atomic_float2 = "GL_EXT_shader_atomic_float2";
 
+const char* const E_GL_EXT_shader_tile_image = "GL_EXT_shader_tile_image";
+
 // Arrays of extensions for the above AEP duplications
 
 const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4
index a59da44..f6f36d6 100644
--- a/glslang/MachineIndependent/glslang.m4
+++ b/glslang/MachineIndependent/glslang.m4
@@ -211,6 +211,7 @@
 %token <lex> ACCSTRUCTEXT
 %token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
+%token <lex> HITOBJECTNV HITOBJECTATTRNV
 
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
@@ -278,6 +279,7 @@
 %token <lex> SPIRV_INSTRUCTION SPIRV_EXECUTION_MODE SPIRV_EXECUTION_MODE_ID
 %token <lex> SPIRV_DECORATE SPIRV_DECORATE_ID SPIRV_DECORATE_STRING
 %token <lex> SPIRV_TYPE SPIRV_STORAGE_CLASS SPIRV_BY_REFERENCE SPIRV_LITERAL
+%token <lex> ATTACHMENTEXT IATTACHMENTEXT UATTACHMENTEXT
 
 GLSLANG_WEB_EXCLUDE_OFF
 
@@ -303,14 +305,14 @@
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
 %token <lex> TERMINATE_INVOCATION
 %token <lex> TERMINATE_RAY IGNORE_INTERSECTION
-%token <lex> UNIFORM SHARED BUFFER
+%token <lex> UNIFORM SHARED BUFFER TILEIMAGEEXT
 %token <lex> FLAT SMOOTH LAYOUT
 
 GLSLANG_WEB_EXCLUDE_ON
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
-%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
+%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV 
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
 %token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
@@ -377,7 +379,7 @@
 %type <interm.type> spirv_storage_class_qualifier
 %type <interm.type> spirv_decorate_qualifier
 %type <interm.intermNode> spirv_decorate_parameter_list spirv_decorate_parameter
-%type <interm.intermNode> spirv_decorate_id_parameter_list
+%type <interm.intermNode> spirv_decorate_id_parameter_list spirv_decorate_id_parameter
 %type <interm.intermNode> spirv_decorate_string_parameter_list
 %type <interm.type> spirv_type_specifier
 %type <interm.spirvTypeParams> spirv_type_parameter_list spirv_type_parameter
@@ -1218,7 +1220,7 @@
         parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier);
     }
     | type_qualifier type_specifier  {
-        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
+        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier, false, &$2);
         parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2);
 
         if ($2.arraySizes) {
@@ -1475,6 +1477,11 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqUniform;
     }
+    | TILEIMAGEEXT {
+        parseContext.globalCheck($1.loc, "tileImageEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqTileImageEXT;
+    }
     | SHARED {
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -1534,6 +1541,14 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqHitAttr;
     }
+	| HITOBJECTATTRNV {
+        parseContext.globalCheck($1.loc, "hitAttributeNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
+            | EShLangMissMask), "hitObjectAttributeNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitObjectAttrNV;
+	}
     | HITATTREXT {
         parseContext.globalCheck($1.loc, "hitAttributeEXT");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -3437,6 +3452,24 @@
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
     }
+    | ATTACHMENTEXT {
+        parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setAttachmentEXT(EbtFloat);
+    }
+    | IATTACHMENTEXT {
+        parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setAttachmentEXT(EbtInt);
+    }
+    | UATTACHMENTEXT {
+        parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setAttachmentEXT(EbtUint);
+    }
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3509,6 +3542,10 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
         $$ = $1;
     }
+	| HITOBJECTNV {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtHitObjectNV;
+	}
 GLSLANG_WEB_EXCLUDE_OFF
     | struct_specifier {
         $$ = $1;
@@ -4334,23 +4371,33 @@
     }
 
 spirv_decorate_id_parameter_list
-    : constant_expression {
-        if ($1->getBasicType() != EbtFloat &&
-            $1->getBasicType() != EbtInt &&
-            $1->getBasicType() != EbtUint &&
-            $1->getBasicType() != EbtBool)
-            parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), "");
+    : spirv_decorate_id_parameter {
         $$ = parseContext.intermediate.makeAggregate($1);
     }
-    | spirv_decorate_id_parameter_list COMMA constant_expression {
-        if ($3->getBasicType() != EbtFloat &&
-            $3->getBasicType() != EbtInt &&
-            $3->getBasicType() != EbtUint &&
-            $3->getBasicType() != EbtBool)
-            parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), "");
+    | spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter {
         $$ = parseContext.intermediate.growAggregate($1, $3);
     }
 
+spirv_decorate_id_parameter
+    : variable_identifier {
+        if ($1->getAsConstantUnion() || $1->getAsSymbolNode())
+            $$ = $1;
+        else
+            parseContext.error($1->getLoc(), "only allow constants or variables which are not elements of a composite", "", "");
+    }
+    | FLOATCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
+    }
+    | INTCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINTCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
+    | BOOLCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
+    }
+
 spirv_decorate_string_parameter_list
     : STRING_LITERAL {
         $$ = parseContext.intermediate.makeAggregate(
@@ -4392,6 +4439,9 @@
     : constant_expression {
         $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion());
     }
+    | type_specifier_nonarray {
+        $$ = parseContext.makeSpirvTypeParameters($1.loc, $1);
+    }
 
 spirv_instruction_qualifier
     : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN {
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 35242f2..4ab39f1 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -151,7 +151,7 @@
 
 %parse-param {glslang::TParseContext* pParseContext}
 %lex-param {parseContext}
-%define api.pure  // enable thread safety
+%pure-parser  // enable thread safety
 %expect 1     // One shift reduce conflict because of if | else
 
 %token <lex> CONST BOOL INT UINT FLOAT
@@ -211,6 +211,7 @@
 %token <lex> ACCSTRUCTEXT
 %token <lex> RAYQUERYEXT
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
+%token <lex> HITOBJECTNV HITOBJECTATTRNV
 
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
@@ -278,6 +279,7 @@
 %token <lex> SPIRV_INSTRUCTION SPIRV_EXECUTION_MODE SPIRV_EXECUTION_MODE_ID
 %token <lex> SPIRV_DECORATE SPIRV_DECORATE_ID SPIRV_DECORATE_STRING
 %token <lex> SPIRV_TYPE SPIRV_STORAGE_CLASS SPIRV_BY_REFERENCE SPIRV_LITERAL
+%token <lex> ATTACHMENTEXT IATTACHMENTEXT UATTACHMENTEXT
 
 
 
@@ -303,14 +305,14 @@
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
 %token <lex> TERMINATE_INVOCATION
 %token <lex> TERMINATE_RAY IGNORE_INTERSECTION
-%token <lex> UNIFORM SHARED BUFFER
+%token <lex> UNIFORM SHARED BUFFER TILEIMAGEEXT
 %token <lex> FLAT SMOOTH LAYOUT
 
 
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
 %token <lex> SUBROUTINE DEMOTE
-%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV
+%token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV 
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
 %token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
@@ -377,7 +379,7 @@
 %type <interm.type> spirv_storage_class_qualifier
 %type <interm.type> spirv_decorate_qualifier
 %type <interm.intermNode> spirv_decorate_parameter_list spirv_decorate_parameter
-%type <interm.intermNode> spirv_decorate_id_parameter_list
+%type <interm.intermNode> spirv_decorate_id_parameter_list spirv_decorate_id_parameter
 %type <interm.intermNode> spirv_decorate_string_parameter_list
 %type <interm.type> spirv_type_specifier
 %type <interm.spirvTypeParams> spirv_type_parameter_list spirv_type_parameter
@@ -1218,7 +1220,7 @@
         parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier);
     }
     | type_qualifier type_specifier  {
-        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier);
+        parseContext.globalQualifierFixCheck($1.loc, $1.qualifier, false, &$2);
         parseContext.globalQualifierTypeCheck($1.loc, $1.qualifier, $2);
 
         if ($2.arraySizes) {
@@ -1475,6 +1477,11 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqUniform;
     }
+    | TILEIMAGEEXT {
+        parseContext.globalCheck($1.loc, "tileImageEXT");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqTileImageEXT;
+    }
     | SHARED {
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -1534,6 +1541,14 @@
         $$.init($1.loc);
         $$.qualifier.storage = EvqHitAttr;
     }
+	| HITOBJECTATTRNV {
+        parseContext.globalCheck($1.loc, "hitAttributeNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
+            | EShLangMissMask), "hitObjectAttributeNV");
+        parseContext.profileRequires($1.loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqHitObjectAttrNV;
+	}
     | HITATTREXT {
         parseContext.globalCheck($1.loc, "hitAttributeEXT");
         parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -3437,6 +3452,24 @@
         $$.sampler.set(EbtFloat, Esd2D);
         $$.sampler.yuv = true;
     }
+    | ATTACHMENTEXT {
+        parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setAttachmentEXT(EbtFloat);
+    }
+    | IATTACHMENTEXT {
+        parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setAttachmentEXT(EbtInt);
+    }
+    | UATTACHMENTEXT {
+        parseContext.requireStage($1.loc, EShLangFragment, "attachmentEXT input");
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtSampler;
+        $$.sampler.setAttachmentEXT(EbtUint);
+    }
     | SUBPASSINPUT {
         parseContext.requireStage($1.loc, EShLangFragment, "subpass input");
         $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
@@ -3509,6 +3542,10 @@
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
         $$ = $1;
     }
+	| HITOBJECTNV {
+       $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+       $$.basicType = EbtHitObjectNV;
+	}
 
     | struct_specifier {
         $$ = $1;
@@ -4334,23 +4371,33 @@
     }
 
 spirv_decorate_id_parameter_list
-    : constant_expression {
-        if ($1->getBasicType() != EbtFloat &&
-            $1->getBasicType() != EbtInt &&
-            $1->getBasicType() != EbtUint &&
-            $1->getBasicType() != EbtBool)
-            parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), "");
+    : spirv_decorate_id_parameter {
         $$ = parseContext.intermediate.makeAggregate($1);
     }
-    | spirv_decorate_id_parameter_list COMMA constant_expression {
-        if ($3->getBasicType() != EbtFloat &&
-            $3->getBasicType() != EbtInt &&
-            $3->getBasicType() != EbtUint &&
-            $3->getBasicType() != EbtBool)
-            parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), "");
+    | spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter {
         $$ = parseContext.intermediate.growAggregate($1, $3);
     }
 
+spirv_decorate_id_parameter
+    : variable_identifier {
+        if ($1->getAsConstantUnion() || $1->getAsSymbolNode())
+            $$ = $1;
+        else
+            parseContext.error($1->getLoc(), "only allow constants or variables which are not elements of a composite", "", "");
+    }
+    | FLOATCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true);
+    }
+    | INTCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true);
+    }
+    | UINTCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true);
+    }
+    | BOOLCONSTANT {
+        $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true);
+    }
+
 spirv_decorate_string_parameter_list
     : STRING_LITERAL {
         $$ = parseContext.intermediate.makeAggregate(
@@ -4392,6 +4439,9 @@
     : constant_expression {
         $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion());
     }
+    | type_specifier_nonarray {
+        $$ = parseContext.makeSpirvTypeParameters($1.loc, $1);
+    }
 
 spirv_instruction_qualifier
     : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN {
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 7ca3e71..cee8a63 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -287,429 +287,436 @@
   YYSYMBOL_FCOOPMATNV = 163,               /* FCOOPMATNV  */
   YYSYMBOL_ICOOPMATNV = 164,               /* ICOOPMATNV  */
   YYSYMBOL_UCOOPMATNV = 165,               /* UCOOPMATNV  */
-  YYSYMBOL_SAMPLERCUBEARRAY = 166,         /* SAMPLERCUBEARRAY  */
-  YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 167,   /* SAMPLERCUBEARRAYSHADOW  */
-  YYSYMBOL_ISAMPLERCUBEARRAY = 168,        /* ISAMPLERCUBEARRAY  */
-  YYSYMBOL_USAMPLERCUBEARRAY = 169,        /* USAMPLERCUBEARRAY  */
-  YYSYMBOL_SAMPLER1D = 170,                /* SAMPLER1D  */
-  YYSYMBOL_SAMPLER1DARRAY = 171,           /* SAMPLER1DARRAY  */
-  YYSYMBOL_SAMPLER1DARRAYSHADOW = 172,     /* SAMPLER1DARRAYSHADOW  */
-  YYSYMBOL_ISAMPLER1D = 173,               /* ISAMPLER1D  */
-  YYSYMBOL_SAMPLER1DSHADOW = 174,          /* SAMPLER1DSHADOW  */
-  YYSYMBOL_SAMPLER2DRECT = 175,            /* SAMPLER2DRECT  */
-  YYSYMBOL_SAMPLER2DRECTSHADOW = 176,      /* SAMPLER2DRECTSHADOW  */
-  YYSYMBOL_ISAMPLER2DRECT = 177,           /* ISAMPLER2DRECT  */
-  YYSYMBOL_USAMPLER2DRECT = 178,           /* USAMPLER2DRECT  */
-  YYSYMBOL_SAMPLERBUFFER = 179,            /* SAMPLERBUFFER  */
-  YYSYMBOL_ISAMPLERBUFFER = 180,           /* ISAMPLERBUFFER  */
-  YYSYMBOL_USAMPLERBUFFER = 181,           /* USAMPLERBUFFER  */
-  YYSYMBOL_SAMPLER2DMS = 182,              /* SAMPLER2DMS  */
-  YYSYMBOL_ISAMPLER2DMS = 183,             /* ISAMPLER2DMS  */
-  YYSYMBOL_USAMPLER2DMS = 184,             /* USAMPLER2DMS  */
-  YYSYMBOL_SAMPLER2DMSARRAY = 185,         /* SAMPLER2DMSARRAY  */
-  YYSYMBOL_ISAMPLER2DMSARRAY = 186,        /* ISAMPLER2DMSARRAY  */
-  YYSYMBOL_USAMPLER2DMSARRAY = 187,        /* USAMPLER2DMSARRAY  */
-  YYSYMBOL_SAMPLEREXTERNALOES = 188,       /* SAMPLEREXTERNALOES  */
-  YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 189,  /* SAMPLEREXTERNAL2DY2YEXT  */
-  YYSYMBOL_ISAMPLER1DARRAY = 190,          /* ISAMPLER1DARRAY  */
-  YYSYMBOL_USAMPLER1D = 191,               /* USAMPLER1D  */
-  YYSYMBOL_USAMPLER1DARRAY = 192,          /* USAMPLER1DARRAY  */
-  YYSYMBOL_F16SAMPLER1D = 193,             /* F16SAMPLER1D  */
-  YYSYMBOL_F16SAMPLER2D = 194,             /* F16SAMPLER2D  */
-  YYSYMBOL_F16SAMPLER3D = 195,             /* F16SAMPLER3D  */
-  YYSYMBOL_F16SAMPLER2DRECT = 196,         /* F16SAMPLER2DRECT  */
-  YYSYMBOL_F16SAMPLERCUBE = 197,           /* F16SAMPLERCUBE  */
-  YYSYMBOL_F16SAMPLER1DARRAY = 198,        /* F16SAMPLER1DARRAY  */
-  YYSYMBOL_F16SAMPLER2DARRAY = 199,        /* F16SAMPLER2DARRAY  */
-  YYSYMBOL_F16SAMPLERCUBEARRAY = 200,      /* F16SAMPLERCUBEARRAY  */
-  YYSYMBOL_F16SAMPLERBUFFER = 201,         /* F16SAMPLERBUFFER  */
-  YYSYMBOL_F16SAMPLER2DMS = 202,           /* F16SAMPLER2DMS  */
-  YYSYMBOL_F16SAMPLER2DMSARRAY = 203,      /* F16SAMPLER2DMSARRAY  */
-  YYSYMBOL_F16SAMPLER1DSHADOW = 204,       /* F16SAMPLER1DSHADOW  */
-  YYSYMBOL_F16SAMPLER2DSHADOW = 205,       /* F16SAMPLER2DSHADOW  */
-  YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 206,  /* F16SAMPLER1DARRAYSHADOW  */
-  YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 207,  /* F16SAMPLER2DARRAYSHADOW  */
-  YYSYMBOL_F16SAMPLER2DRECTSHADOW = 208,   /* F16SAMPLER2DRECTSHADOW  */
-  YYSYMBOL_F16SAMPLERCUBESHADOW = 209,     /* F16SAMPLERCUBESHADOW  */
-  YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 210, /* F16SAMPLERCUBEARRAYSHADOW  */
-  YYSYMBOL_IMAGE1D = 211,                  /* IMAGE1D  */
-  YYSYMBOL_IIMAGE1D = 212,                 /* IIMAGE1D  */
-  YYSYMBOL_UIMAGE1D = 213,                 /* UIMAGE1D  */
-  YYSYMBOL_IMAGE2D = 214,                  /* IMAGE2D  */
-  YYSYMBOL_IIMAGE2D = 215,                 /* IIMAGE2D  */
-  YYSYMBOL_UIMAGE2D = 216,                 /* UIMAGE2D  */
-  YYSYMBOL_IMAGE3D = 217,                  /* IMAGE3D  */
-  YYSYMBOL_IIMAGE3D = 218,                 /* IIMAGE3D  */
-  YYSYMBOL_UIMAGE3D = 219,                 /* UIMAGE3D  */
-  YYSYMBOL_IMAGE2DRECT = 220,              /* IMAGE2DRECT  */
-  YYSYMBOL_IIMAGE2DRECT = 221,             /* IIMAGE2DRECT  */
-  YYSYMBOL_UIMAGE2DRECT = 222,             /* UIMAGE2DRECT  */
-  YYSYMBOL_IMAGECUBE = 223,                /* IMAGECUBE  */
-  YYSYMBOL_IIMAGECUBE = 224,               /* IIMAGECUBE  */
-  YYSYMBOL_UIMAGECUBE = 225,               /* UIMAGECUBE  */
-  YYSYMBOL_IMAGEBUFFER = 226,              /* IMAGEBUFFER  */
-  YYSYMBOL_IIMAGEBUFFER = 227,             /* IIMAGEBUFFER  */
-  YYSYMBOL_UIMAGEBUFFER = 228,             /* UIMAGEBUFFER  */
-  YYSYMBOL_IMAGE1DARRAY = 229,             /* IMAGE1DARRAY  */
-  YYSYMBOL_IIMAGE1DARRAY = 230,            /* IIMAGE1DARRAY  */
-  YYSYMBOL_UIMAGE1DARRAY = 231,            /* UIMAGE1DARRAY  */
-  YYSYMBOL_IMAGE2DARRAY = 232,             /* IMAGE2DARRAY  */
-  YYSYMBOL_IIMAGE2DARRAY = 233,            /* IIMAGE2DARRAY  */
-  YYSYMBOL_UIMAGE2DARRAY = 234,            /* UIMAGE2DARRAY  */
-  YYSYMBOL_IMAGECUBEARRAY = 235,           /* IMAGECUBEARRAY  */
-  YYSYMBOL_IIMAGECUBEARRAY = 236,          /* IIMAGECUBEARRAY  */
-  YYSYMBOL_UIMAGECUBEARRAY = 237,          /* UIMAGECUBEARRAY  */
-  YYSYMBOL_IMAGE2DMS = 238,                /* IMAGE2DMS  */
-  YYSYMBOL_IIMAGE2DMS = 239,               /* IIMAGE2DMS  */
-  YYSYMBOL_UIMAGE2DMS = 240,               /* UIMAGE2DMS  */
-  YYSYMBOL_IMAGE2DMSARRAY = 241,           /* IMAGE2DMSARRAY  */
-  YYSYMBOL_IIMAGE2DMSARRAY = 242,          /* IIMAGE2DMSARRAY  */
-  YYSYMBOL_UIMAGE2DMSARRAY = 243,          /* UIMAGE2DMSARRAY  */
-  YYSYMBOL_F16IMAGE1D = 244,               /* F16IMAGE1D  */
-  YYSYMBOL_F16IMAGE2D = 245,               /* F16IMAGE2D  */
-  YYSYMBOL_F16IMAGE3D = 246,               /* F16IMAGE3D  */
-  YYSYMBOL_F16IMAGE2DRECT = 247,           /* F16IMAGE2DRECT  */
-  YYSYMBOL_F16IMAGECUBE = 248,             /* F16IMAGECUBE  */
-  YYSYMBOL_F16IMAGE1DARRAY = 249,          /* F16IMAGE1DARRAY  */
-  YYSYMBOL_F16IMAGE2DARRAY = 250,          /* F16IMAGE2DARRAY  */
-  YYSYMBOL_F16IMAGECUBEARRAY = 251,        /* F16IMAGECUBEARRAY  */
-  YYSYMBOL_F16IMAGEBUFFER = 252,           /* F16IMAGEBUFFER  */
-  YYSYMBOL_F16IMAGE2DMS = 253,             /* F16IMAGE2DMS  */
-  YYSYMBOL_F16IMAGE2DMSARRAY = 254,        /* F16IMAGE2DMSARRAY  */
-  YYSYMBOL_I64IMAGE1D = 255,               /* I64IMAGE1D  */
-  YYSYMBOL_U64IMAGE1D = 256,               /* U64IMAGE1D  */
-  YYSYMBOL_I64IMAGE2D = 257,               /* I64IMAGE2D  */
-  YYSYMBOL_U64IMAGE2D = 258,               /* U64IMAGE2D  */
-  YYSYMBOL_I64IMAGE3D = 259,               /* I64IMAGE3D  */
-  YYSYMBOL_U64IMAGE3D = 260,               /* U64IMAGE3D  */
-  YYSYMBOL_I64IMAGE2DRECT = 261,           /* I64IMAGE2DRECT  */
-  YYSYMBOL_U64IMAGE2DRECT = 262,           /* U64IMAGE2DRECT  */
-  YYSYMBOL_I64IMAGECUBE = 263,             /* I64IMAGECUBE  */
-  YYSYMBOL_U64IMAGECUBE = 264,             /* U64IMAGECUBE  */
-  YYSYMBOL_I64IMAGEBUFFER = 265,           /* I64IMAGEBUFFER  */
-  YYSYMBOL_U64IMAGEBUFFER = 266,           /* U64IMAGEBUFFER  */
-  YYSYMBOL_I64IMAGE1DARRAY = 267,          /* I64IMAGE1DARRAY  */
-  YYSYMBOL_U64IMAGE1DARRAY = 268,          /* U64IMAGE1DARRAY  */
-  YYSYMBOL_I64IMAGE2DARRAY = 269,          /* I64IMAGE2DARRAY  */
-  YYSYMBOL_U64IMAGE2DARRAY = 270,          /* U64IMAGE2DARRAY  */
-  YYSYMBOL_I64IMAGECUBEARRAY = 271,        /* I64IMAGECUBEARRAY  */
-  YYSYMBOL_U64IMAGECUBEARRAY = 272,        /* U64IMAGECUBEARRAY  */
-  YYSYMBOL_I64IMAGE2DMS = 273,             /* I64IMAGE2DMS  */
-  YYSYMBOL_U64IMAGE2DMS = 274,             /* U64IMAGE2DMS  */
-  YYSYMBOL_I64IMAGE2DMSARRAY = 275,        /* I64IMAGE2DMSARRAY  */
-  YYSYMBOL_U64IMAGE2DMSARRAY = 276,        /* U64IMAGE2DMSARRAY  */
-  YYSYMBOL_TEXTURECUBEARRAY = 277,         /* TEXTURECUBEARRAY  */
-  YYSYMBOL_ITEXTURECUBEARRAY = 278,        /* ITEXTURECUBEARRAY  */
-  YYSYMBOL_UTEXTURECUBEARRAY = 279,        /* UTEXTURECUBEARRAY  */
-  YYSYMBOL_TEXTURE1D = 280,                /* TEXTURE1D  */
-  YYSYMBOL_ITEXTURE1D = 281,               /* ITEXTURE1D  */
-  YYSYMBOL_UTEXTURE1D = 282,               /* UTEXTURE1D  */
-  YYSYMBOL_TEXTURE1DARRAY = 283,           /* TEXTURE1DARRAY  */
-  YYSYMBOL_ITEXTURE1DARRAY = 284,          /* ITEXTURE1DARRAY  */
-  YYSYMBOL_UTEXTURE1DARRAY = 285,          /* UTEXTURE1DARRAY  */
-  YYSYMBOL_TEXTURE2DRECT = 286,            /* TEXTURE2DRECT  */
-  YYSYMBOL_ITEXTURE2DRECT = 287,           /* ITEXTURE2DRECT  */
-  YYSYMBOL_UTEXTURE2DRECT = 288,           /* UTEXTURE2DRECT  */
-  YYSYMBOL_TEXTUREBUFFER = 289,            /* TEXTUREBUFFER  */
-  YYSYMBOL_ITEXTUREBUFFER = 290,           /* ITEXTUREBUFFER  */
-  YYSYMBOL_UTEXTUREBUFFER = 291,           /* UTEXTUREBUFFER  */
-  YYSYMBOL_TEXTURE2DMS = 292,              /* TEXTURE2DMS  */
-  YYSYMBOL_ITEXTURE2DMS = 293,             /* ITEXTURE2DMS  */
-  YYSYMBOL_UTEXTURE2DMS = 294,             /* UTEXTURE2DMS  */
-  YYSYMBOL_TEXTURE2DMSARRAY = 295,         /* TEXTURE2DMSARRAY  */
-  YYSYMBOL_ITEXTURE2DMSARRAY = 296,        /* ITEXTURE2DMSARRAY  */
-  YYSYMBOL_UTEXTURE2DMSARRAY = 297,        /* UTEXTURE2DMSARRAY  */
-  YYSYMBOL_F16TEXTURE1D = 298,             /* F16TEXTURE1D  */
-  YYSYMBOL_F16TEXTURE2D = 299,             /* F16TEXTURE2D  */
-  YYSYMBOL_F16TEXTURE3D = 300,             /* F16TEXTURE3D  */
-  YYSYMBOL_F16TEXTURE2DRECT = 301,         /* F16TEXTURE2DRECT  */
-  YYSYMBOL_F16TEXTURECUBE = 302,           /* F16TEXTURECUBE  */
-  YYSYMBOL_F16TEXTURE1DARRAY = 303,        /* F16TEXTURE1DARRAY  */
-  YYSYMBOL_F16TEXTURE2DARRAY = 304,        /* F16TEXTURE2DARRAY  */
-  YYSYMBOL_F16TEXTURECUBEARRAY = 305,      /* F16TEXTURECUBEARRAY  */
-  YYSYMBOL_F16TEXTUREBUFFER = 306,         /* F16TEXTUREBUFFER  */
-  YYSYMBOL_F16TEXTURE2DMS = 307,           /* F16TEXTURE2DMS  */
-  YYSYMBOL_F16TEXTURE2DMSARRAY = 308,      /* F16TEXTURE2DMSARRAY  */
-  YYSYMBOL_SUBPASSINPUT = 309,             /* SUBPASSINPUT  */
-  YYSYMBOL_SUBPASSINPUTMS = 310,           /* SUBPASSINPUTMS  */
-  YYSYMBOL_ISUBPASSINPUT = 311,            /* ISUBPASSINPUT  */
-  YYSYMBOL_ISUBPASSINPUTMS = 312,          /* ISUBPASSINPUTMS  */
-  YYSYMBOL_USUBPASSINPUT = 313,            /* USUBPASSINPUT  */
-  YYSYMBOL_USUBPASSINPUTMS = 314,          /* USUBPASSINPUTMS  */
-  YYSYMBOL_F16SUBPASSINPUT = 315,          /* F16SUBPASSINPUT  */
-  YYSYMBOL_F16SUBPASSINPUTMS = 316,        /* F16SUBPASSINPUTMS  */
-  YYSYMBOL_SPIRV_INSTRUCTION = 317,        /* SPIRV_INSTRUCTION  */
-  YYSYMBOL_SPIRV_EXECUTION_MODE = 318,     /* SPIRV_EXECUTION_MODE  */
-  YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 319,  /* SPIRV_EXECUTION_MODE_ID  */
-  YYSYMBOL_SPIRV_DECORATE = 320,           /* SPIRV_DECORATE  */
-  YYSYMBOL_SPIRV_DECORATE_ID = 321,        /* SPIRV_DECORATE_ID  */
-  YYSYMBOL_SPIRV_DECORATE_STRING = 322,    /* SPIRV_DECORATE_STRING  */
-  YYSYMBOL_SPIRV_TYPE = 323,               /* SPIRV_TYPE  */
-  YYSYMBOL_SPIRV_STORAGE_CLASS = 324,      /* SPIRV_STORAGE_CLASS  */
-  YYSYMBOL_SPIRV_BY_REFERENCE = 325,       /* SPIRV_BY_REFERENCE  */
-  YYSYMBOL_SPIRV_LITERAL = 326,            /* SPIRV_LITERAL  */
-  YYSYMBOL_LEFT_OP = 327,                  /* LEFT_OP  */
-  YYSYMBOL_RIGHT_OP = 328,                 /* RIGHT_OP  */
-  YYSYMBOL_INC_OP = 329,                   /* INC_OP  */
-  YYSYMBOL_DEC_OP = 330,                   /* DEC_OP  */
-  YYSYMBOL_LE_OP = 331,                    /* LE_OP  */
-  YYSYMBOL_GE_OP = 332,                    /* GE_OP  */
-  YYSYMBOL_EQ_OP = 333,                    /* EQ_OP  */
-  YYSYMBOL_NE_OP = 334,                    /* NE_OP  */
-  YYSYMBOL_AND_OP = 335,                   /* AND_OP  */
-  YYSYMBOL_OR_OP = 336,                    /* OR_OP  */
-  YYSYMBOL_XOR_OP = 337,                   /* XOR_OP  */
-  YYSYMBOL_MUL_ASSIGN = 338,               /* MUL_ASSIGN  */
-  YYSYMBOL_DIV_ASSIGN = 339,               /* DIV_ASSIGN  */
-  YYSYMBOL_ADD_ASSIGN = 340,               /* ADD_ASSIGN  */
-  YYSYMBOL_MOD_ASSIGN = 341,               /* MOD_ASSIGN  */
-  YYSYMBOL_LEFT_ASSIGN = 342,              /* LEFT_ASSIGN  */
-  YYSYMBOL_RIGHT_ASSIGN = 343,             /* RIGHT_ASSIGN  */
-  YYSYMBOL_AND_ASSIGN = 344,               /* AND_ASSIGN  */
-  YYSYMBOL_XOR_ASSIGN = 345,               /* XOR_ASSIGN  */
-  YYSYMBOL_OR_ASSIGN = 346,                /* OR_ASSIGN  */
-  YYSYMBOL_SUB_ASSIGN = 347,               /* SUB_ASSIGN  */
-  YYSYMBOL_STRING_LITERAL = 348,           /* STRING_LITERAL  */
-  YYSYMBOL_LEFT_PAREN = 349,               /* LEFT_PAREN  */
-  YYSYMBOL_RIGHT_PAREN = 350,              /* RIGHT_PAREN  */
-  YYSYMBOL_LEFT_BRACKET = 351,             /* LEFT_BRACKET  */
-  YYSYMBOL_RIGHT_BRACKET = 352,            /* RIGHT_BRACKET  */
-  YYSYMBOL_LEFT_BRACE = 353,               /* LEFT_BRACE  */
-  YYSYMBOL_RIGHT_BRACE = 354,              /* RIGHT_BRACE  */
-  YYSYMBOL_DOT = 355,                      /* DOT  */
-  YYSYMBOL_COMMA = 356,                    /* COMMA  */
-  YYSYMBOL_COLON = 357,                    /* COLON  */
-  YYSYMBOL_EQUAL = 358,                    /* EQUAL  */
-  YYSYMBOL_SEMICOLON = 359,                /* SEMICOLON  */
-  YYSYMBOL_BANG = 360,                     /* BANG  */
-  YYSYMBOL_DASH = 361,                     /* DASH  */
-  YYSYMBOL_TILDE = 362,                    /* TILDE  */
-  YYSYMBOL_PLUS = 363,                     /* PLUS  */
-  YYSYMBOL_STAR = 364,                     /* STAR  */
-  YYSYMBOL_SLASH = 365,                    /* SLASH  */
-  YYSYMBOL_PERCENT = 366,                  /* PERCENT  */
-  YYSYMBOL_LEFT_ANGLE = 367,               /* LEFT_ANGLE  */
-  YYSYMBOL_RIGHT_ANGLE = 368,              /* RIGHT_ANGLE  */
-  YYSYMBOL_VERTICAL_BAR = 369,             /* VERTICAL_BAR  */
-  YYSYMBOL_CARET = 370,                    /* CARET  */
-  YYSYMBOL_AMPERSAND = 371,                /* AMPERSAND  */
-  YYSYMBOL_QUESTION = 372,                 /* QUESTION  */
-  YYSYMBOL_INVARIANT = 373,                /* INVARIANT  */
-  YYSYMBOL_HIGH_PRECISION = 374,           /* HIGH_PRECISION  */
-  YYSYMBOL_MEDIUM_PRECISION = 375,         /* MEDIUM_PRECISION  */
-  YYSYMBOL_LOW_PRECISION = 376,            /* LOW_PRECISION  */
-  YYSYMBOL_PRECISION = 377,                /* PRECISION  */
-  YYSYMBOL_PACKED = 378,                   /* PACKED  */
-  YYSYMBOL_RESOURCE = 379,                 /* RESOURCE  */
-  YYSYMBOL_SUPERP = 380,                   /* SUPERP  */
-  YYSYMBOL_FLOATCONSTANT = 381,            /* FLOATCONSTANT  */
-  YYSYMBOL_INTCONSTANT = 382,              /* INTCONSTANT  */
-  YYSYMBOL_UINTCONSTANT = 383,             /* UINTCONSTANT  */
-  YYSYMBOL_BOOLCONSTANT = 384,             /* BOOLCONSTANT  */
-  YYSYMBOL_IDENTIFIER = 385,               /* IDENTIFIER  */
-  YYSYMBOL_TYPE_NAME = 386,                /* TYPE_NAME  */
-  YYSYMBOL_CENTROID = 387,                 /* CENTROID  */
-  YYSYMBOL_IN = 388,                       /* IN  */
-  YYSYMBOL_OUT = 389,                      /* OUT  */
-  YYSYMBOL_INOUT = 390,                    /* INOUT  */
-  YYSYMBOL_STRUCT = 391,                   /* STRUCT  */
-  YYSYMBOL_VOID = 392,                     /* VOID  */
-  YYSYMBOL_WHILE = 393,                    /* WHILE  */
-  YYSYMBOL_BREAK = 394,                    /* BREAK  */
-  YYSYMBOL_CONTINUE = 395,                 /* CONTINUE  */
-  YYSYMBOL_DO = 396,                       /* DO  */
-  YYSYMBOL_ELSE = 397,                     /* ELSE  */
-  YYSYMBOL_FOR = 398,                      /* FOR  */
-  YYSYMBOL_IF = 399,                       /* IF  */
-  YYSYMBOL_DISCARD = 400,                  /* DISCARD  */
-  YYSYMBOL_RETURN = 401,                   /* RETURN  */
-  YYSYMBOL_SWITCH = 402,                   /* SWITCH  */
-  YYSYMBOL_CASE = 403,                     /* CASE  */
-  YYSYMBOL_DEFAULT = 404,                  /* DEFAULT  */
-  YYSYMBOL_TERMINATE_INVOCATION = 405,     /* TERMINATE_INVOCATION  */
-  YYSYMBOL_TERMINATE_RAY = 406,            /* TERMINATE_RAY  */
-  YYSYMBOL_IGNORE_INTERSECTION = 407,      /* IGNORE_INTERSECTION  */
-  YYSYMBOL_UNIFORM = 408,                  /* UNIFORM  */
-  YYSYMBOL_SHARED = 409,                   /* SHARED  */
-  YYSYMBOL_BUFFER = 410,                   /* BUFFER  */
-  YYSYMBOL_FLAT = 411,                     /* FLAT  */
-  YYSYMBOL_SMOOTH = 412,                   /* SMOOTH  */
-  YYSYMBOL_LAYOUT = 413,                   /* LAYOUT  */
-  YYSYMBOL_DOUBLECONSTANT = 414,           /* DOUBLECONSTANT  */
-  YYSYMBOL_INT16CONSTANT = 415,            /* INT16CONSTANT  */
-  YYSYMBOL_UINT16CONSTANT = 416,           /* UINT16CONSTANT  */
-  YYSYMBOL_FLOAT16CONSTANT = 417,          /* FLOAT16CONSTANT  */
-  YYSYMBOL_INT32CONSTANT = 418,            /* INT32CONSTANT  */
-  YYSYMBOL_UINT32CONSTANT = 419,           /* UINT32CONSTANT  */
-  YYSYMBOL_INT64CONSTANT = 420,            /* INT64CONSTANT  */
-  YYSYMBOL_UINT64CONSTANT = 421,           /* UINT64CONSTANT  */
-  YYSYMBOL_SUBROUTINE = 422,               /* SUBROUTINE  */
-  YYSYMBOL_DEMOTE = 423,                   /* DEMOTE  */
-  YYSYMBOL_PAYLOADNV = 424,                /* PAYLOADNV  */
-  YYSYMBOL_PAYLOADINNV = 425,              /* PAYLOADINNV  */
-  YYSYMBOL_HITATTRNV = 426,                /* HITATTRNV  */
-  YYSYMBOL_CALLDATANV = 427,               /* CALLDATANV  */
-  YYSYMBOL_CALLDATAINNV = 428,             /* CALLDATAINNV  */
-  YYSYMBOL_PAYLOADEXT = 429,               /* PAYLOADEXT  */
-  YYSYMBOL_PAYLOADINEXT = 430,             /* PAYLOADINEXT  */
-  YYSYMBOL_HITATTREXT = 431,               /* HITATTREXT  */
-  YYSYMBOL_CALLDATAEXT = 432,              /* CALLDATAEXT  */
-  YYSYMBOL_CALLDATAINEXT = 433,            /* CALLDATAINEXT  */
-  YYSYMBOL_PATCH = 434,                    /* PATCH  */
-  YYSYMBOL_SAMPLE = 435,                   /* SAMPLE  */
-  YYSYMBOL_NONUNIFORM = 436,               /* NONUNIFORM  */
-  YYSYMBOL_COHERENT = 437,                 /* COHERENT  */
-  YYSYMBOL_VOLATILE = 438,                 /* VOLATILE  */
-  YYSYMBOL_RESTRICT = 439,                 /* RESTRICT  */
-  YYSYMBOL_READONLY = 440,                 /* READONLY  */
-  YYSYMBOL_WRITEONLY = 441,                /* WRITEONLY  */
-  YYSYMBOL_DEVICECOHERENT = 442,           /* DEVICECOHERENT  */
-  YYSYMBOL_QUEUEFAMILYCOHERENT = 443,      /* QUEUEFAMILYCOHERENT  */
-  YYSYMBOL_WORKGROUPCOHERENT = 444,        /* WORKGROUPCOHERENT  */
-  YYSYMBOL_SUBGROUPCOHERENT = 445,         /* SUBGROUPCOHERENT  */
-  YYSYMBOL_NONPRIVATE = 446,               /* NONPRIVATE  */
-  YYSYMBOL_SHADERCALLCOHERENT = 447,       /* SHADERCALLCOHERENT  */
-  YYSYMBOL_NOPERSPECTIVE = 448,            /* NOPERSPECTIVE  */
-  YYSYMBOL_EXPLICITINTERPAMD = 449,        /* EXPLICITINTERPAMD  */
-  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  */
+  YYSYMBOL_HITOBJECTNV = 166,              /* HITOBJECTNV  */
+  YYSYMBOL_HITOBJECTATTRNV = 167,          /* HITOBJECTATTRNV  */
+  YYSYMBOL_SAMPLERCUBEARRAY = 168,         /* SAMPLERCUBEARRAY  */
+  YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 169,   /* SAMPLERCUBEARRAYSHADOW  */
+  YYSYMBOL_ISAMPLERCUBEARRAY = 170,        /* ISAMPLERCUBEARRAY  */
+  YYSYMBOL_USAMPLERCUBEARRAY = 171,        /* USAMPLERCUBEARRAY  */
+  YYSYMBOL_SAMPLER1D = 172,                /* SAMPLER1D  */
+  YYSYMBOL_SAMPLER1DARRAY = 173,           /* SAMPLER1DARRAY  */
+  YYSYMBOL_SAMPLER1DARRAYSHADOW = 174,     /* SAMPLER1DARRAYSHADOW  */
+  YYSYMBOL_ISAMPLER1D = 175,               /* ISAMPLER1D  */
+  YYSYMBOL_SAMPLER1DSHADOW = 176,          /* SAMPLER1DSHADOW  */
+  YYSYMBOL_SAMPLER2DRECT = 177,            /* SAMPLER2DRECT  */
+  YYSYMBOL_SAMPLER2DRECTSHADOW = 178,      /* SAMPLER2DRECTSHADOW  */
+  YYSYMBOL_ISAMPLER2DRECT = 179,           /* ISAMPLER2DRECT  */
+  YYSYMBOL_USAMPLER2DRECT = 180,           /* USAMPLER2DRECT  */
+  YYSYMBOL_SAMPLERBUFFER = 181,            /* SAMPLERBUFFER  */
+  YYSYMBOL_ISAMPLERBUFFER = 182,           /* ISAMPLERBUFFER  */
+  YYSYMBOL_USAMPLERBUFFER = 183,           /* USAMPLERBUFFER  */
+  YYSYMBOL_SAMPLER2DMS = 184,              /* SAMPLER2DMS  */
+  YYSYMBOL_ISAMPLER2DMS = 185,             /* ISAMPLER2DMS  */
+  YYSYMBOL_USAMPLER2DMS = 186,             /* USAMPLER2DMS  */
+  YYSYMBOL_SAMPLER2DMSARRAY = 187,         /* SAMPLER2DMSARRAY  */
+  YYSYMBOL_ISAMPLER2DMSARRAY = 188,        /* ISAMPLER2DMSARRAY  */
+  YYSYMBOL_USAMPLER2DMSARRAY = 189,        /* USAMPLER2DMSARRAY  */
+  YYSYMBOL_SAMPLEREXTERNALOES = 190,       /* SAMPLEREXTERNALOES  */
+  YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 191,  /* SAMPLEREXTERNAL2DY2YEXT  */
+  YYSYMBOL_ISAMPLER1DARRAY = 192,          /* ISAMPLER1DARRAY  */
+  YYSYMBOL_USAMPLER1D = 193,               /* USAMPLER1D  */
+  YYSYMBOL_USAMPLER1DARRAY = 194,          /* USAMPLER1DARRAY  */
+  YYSYMBOL_F16SAMPLER1D = 195,             /* F16SAMPLER1D  */
+  YYSYMBOL_F16SAMPLER2D = 196,             /* F16SAMPLER2D  */
+  YYSYMBOL_F16SAMPLER3D = 197,             /* F16SAMPLER3D  */
+  YYSYMBOL_F16SAMPLER2DRECT = 198,         /* F16SAMPLER2DRECT  */
+  YYSYMBOL_F16SAMPLERCUBE = 199,           /* F16SAMPLERCUBE  */
+  YYSYMBOL_F16SAMPLER1DARRAY = 200,        /* F16SAMPLER1DARRAY  */
+  YYSYMBOL_F16SAMPLER2DARRAY = 201,        /* F16SAMPLER2DARRAY  */
+  YYSYMBOL_F16SAMPLERCUBEARRAY = 202,      /* F16SAMPLERCUBEARRAY  */
+  YYSYMBOL_F16SAMPLERBUFFER = 203,         /* F16SAMPLERBUFFER  */
+  YYSYMBOL_F16SAMPLER2DMS = 204,           /* F16SAMPLER2DMS  */
+  YYSYMBOL_F16SAMPLER2DMSARRAY = 205,      /* F16SAMPLER2DMSARRAY  */
+  YYSYMBOL_F16SAMPLER1DSHADOW = 206,       /* F16SAMPLER1DSHADOW  */
+  YYSYMBOL_F16SAMPLER2DSHADOW = 207,       /* F16SAMPLER2DSHADOW  */
+  YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 208,  /* F16SAMPLER1DARRAYSHADOW  */
+  YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 209,  /* F16SAMPLER2DARRAYSHADOW  */
+  YYSYMBOL_F16SAMPLER2DRECTSHADOW = 210,   /* F16SAMPLER2DRECTSHADOW  */
+  YYSYMBOL_F16SAMPLERCUBESHADOW = 211,     /* F16SAMPLERCUBESHADOW  */
+  YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 212, /* F16SAMPLERCUBEARRAYSHADOW  */
+  YYSYMBOL_IMAGE1D = 213,                  /* IMAGE1D  */
+  YYSYMBOL_IIMAGE1D = 214,                 /* IIMAGE1D  */
+  YYSYMBOL_UIMAGE1D = 215,                 /* UIMAGE1D  */
+  YYSYMBOL_IMAGE2D = 216,                  /* IMAGE2D  */
+  YYSYMBOL_IIMAGE2D = 217,                 /* IIMAGE2D  */
+  YYSYMBOL_UIMAGE2D = 218,                 /* UIMAGE2D  */
+  YYSYMBOL_IMAGE3D = 219,                  /* IMAGE3D  */
+  YYSYMBOL_IIMAGE3D = 220,                 /* IIMAGE3D  */
+  YYSYMBOL_UIMAGE3D = 221,                 /* UIMAGE3D  */
+  YYSYMBOL_IMAGE2DRECT = 222,              /* IMAGE2DRECT  */
+  YYSYMBOL_IIMAGE2DRECT = 223,             /* IIMAGE2DRECT  */
+  YYSYMBOL_UIMAGE2DRECT = 224,             /* UIMAGE2DRECT  */
+  YYSYMBOL_IMAGECUBE = 225,                /* IMAGECUBE  */
+  YYSYMBOL_IIMAGECUBE = 226,               /* IIMAGECUBE  */
+  YYSYMBOL_UIMAGECUBE = 227,               /* UIMAGECUBE  */
+  YYSYMBOL_IMAGEBUFFER = 228,              /* IMAGEBUFFER  */
+  YYSYMBOL_IIMAGEBUFFER = 229,             /* IIMAGEBUFFER  */
+  YYSYMBOL_UIMAGEBUFFER = 230,             /* UIMAGEBUFFER  */
+  YYSYMBOL_IMAGE1DARRAY = 231,             /* IMAGE1DARRAY  */
+  YYSYMBOL_IIMAGE1DARRAY = 232,            /* IIMAGE1DARRAY  */
+  YYSYMBOL_UIMAGE1DARRAY = 233,            /* UIMAGE1DARRAY  */
+  YYSYMBOL_IMAGE2DARRAY = 234,             /* IMAGE2DARRAY  */
+  YYSYMBOL_IIMAGE2DARRAY = 235,            /* IIMAGE2DARRAY  */
+  YYSYMBOL_UIMAGE2DARRAY = 236,            /* UIMAGE2DARRAY  */
+  YYSYMBOL_IMAGECUBEARRAY = 237,           /* IMAGECUBEARRAY  */
+  YYSYMBOL_IIMAGECUBEARRAY = 238,          /* IIMAGECUBEARRAY  */
+  YYSYMBOL_UIMAGECUBEARRAY = 239,          /* UIMAGECUBEARRAY  */
+  YYSYMBOL_IMAGE2DMS = 240,                /* IMAGE2DMS  */
+  YYSYMBOL_IIMAGE2DMS = 241,               /* IIMAGE2DMS  */
+  YYSYMBOL_UIMAGE2DMS = 242,               /* UIMAGE2DMS  */
+  YYSYMBOL_IMAGE2DMSARRAY = 243,           /* IMAGE2DMSARRAY  */
+  YYSYMBOL_IIMAGE2DMSARRAY = 244,          /* IIMAGE2DMSARRAY  */
+  YYSYMBOL_UIMAGE2DMSARRAY = 245,          /* UIMAGE2DMSARRAY  */
+  YYSYMBOL_F16IMAGE1D = 246,               /* F16IMAGE1D  */
+  YYSYMBOL_F16IMAGE2D = 247,               /* F16IMAGE2D  */
+  YYSYMBOL_F16IMAGE3D = 248,               /* F16IMAGE3D  */
+  YYSYMBOL_F16IMAGE2DRECT = 249,           /* F16IMAGE2DRECT  */
+  YYSYMBOL_F16IMAGECUBE = 250,             /* F16IMAGECUBE  */
+  YYSYMBOL_F16IMAGE1DARRAY = 251,          /* F16IMAGE1DARRAY  */
+  YYSYMBOL_F16IMAGE2DARRAY = 252,          /* F16IMAGE2DARRAY  */
+  YYSYMBOL_F16IMAGECUBEARRAY = 253,        /* F16IMAGECUBEARRAY  */
+  YYSYMBOL_F16IMAGEBUFFER = 254,           /* F16IMAGEBUFFER  */
+  YYSYMBOL_F16IMAGE2DMS = 255,             /* F16IMAGE2DMS  */
+  YYSYMBOL_F16IMAGE2DMSARRAY = 256,        /* F16IMAGE2DMSARRAY  */
+  YYSYMBOL_I64IMAGE1D = 257,               /* I64IMAGE1D  */
+  YYSYMBOL_U64IMAGE1D = 258,               /* U64IMAGE1D  */
+  YYSYMBOL_I64IMAGE2D = 259,               /* I64IMAGE2D  */
+  YYSYMBOL_U64IMAGE2D = 260,               /* U64IMAGE2D  */
+  YYSYMBOL_I64IMAGE3D = 261,               /* I64IMAGE3D  */
+  YYSYMBOL_U64IMAGE3D = 262,               /* U64IMAGE3D  */
+  YYSYMBOL_I64IMAGE2DRECT = 263,           /* I64IMAGE2DRECT  */
+  YYSYMBOL_U64IMAGE2DRECT = 264,           /* U64IMAGE2DRECT  */
+  YYSYMBOL_I64IMAGECUBE = 265,             /* I64IMAGECUBE  */
+  YYSYMBOL_U64IMAGECUBE = 266,             /* U64IMAGECUBE  */
+  YYSYMBOL_I64IMAGEBUFFER = 267,           /* I64IMAGEBUFFER  */
+  YYSYMBOL_U64IMAGEBUFFER = 268,           /* U64IMAGEBUFFER  */
+  YYSYMBOL_I64IMAGE1DARRAY = 269,          /* I64IMAGE1DARRAY  */
+  YYSYMBOL_U64IMAGE1DARRAY = 270,          /* U64IMAGE1DARRAY  */
+  YYSYMBOL_I64IMAGE2DARRAY = 271,          /* I64IMAGE2DARRAY  */
+  YYSYMBOL_U64IMAGE2DARRAY = 272,          /* U64IMAGE2DARRAY  */
+  YYSYMBOL_I64IMAGECUBEARRAY = 273,        /* I64IMAGECUBEARRAY  */
+  YYSYMBOL_U64IMAGECUBEARRAY = 274,        /* U64IMAGECUBEARRAY  */
+  YYSYMBOL_I64IMAGE2DMS = 275,             /* I64IMAGE2DMS  */
+  YYSYMBOL_U64IMAGE2DMS = 276,             /* U64IMAGE2DMS  */
+  YYSYMBOL_I64IMAGE2DMSARRAY = 277,        /* I64IMAGE2DMSARRAY  */
+  YYSYMBOL_U64IMAGE2DMSARRAY = 278,        /* U64IMAGE2DMSARRAY  */
+  YYSYMBOL_TEXTURECUBEARRAY = 279,         /* TEXTURECUBEARRAY  */
+  YYSYMBOL_ITEXTURECUBEARRAY = 280,        /* ITEXTURECUBEARRAY  */
+  YYSYMBOL_UTEXTURECUBEARRAY = 281,        /* UTEXTURECUBEARRAY  */
+  YYSYMBOL_TEXTURE1D = 282,                /* TEXTURE1D  */
+  YYSYMBOL_ITEXTURE1D = 283,               /* ITEXTURE1D  */
+  YYSYMBOL_UTEXTURE1D = 284,               /* UTEXTURE1D  */
+  YYSYMBOL_TEXTURE1DARRAY = 285,           /* TEXTURE1DARRAY  */
+  YYSYMBOL_ITEXTURE1DARRAY = 286,          /* ITEXTURE1DARRAY  */
+  YYSYMBOL_UTEXTURE1DARRAY = 287,          /* UTEXTURE1DARRAY  */
+  YYSYMBOL_TEXTURE2DRECT = 288,            /* TEXTURE2DRECT  */
+  YYSYMBOL_ITEXTURE2DRECT = 289,           /* ITEXTURE2DRECT  */
+  YYSYMBOL_UTEXTURE2DRECT = 290,           /* UTEXTURE2DRECT  */
+  YYSYMBOL_TEXTUREBUFFER = 291,            /* TEXTUREBUFFER  */
+  YYSYMBOL_ITEXTUREBUFFER = 292,           /* ITEXTUREBUFFER  */
+  YYSYMBOL_UTEXTUREBUFFER = 293,           /* UTEXTUREBUFFER  */
+  YYSYMBOL_TEXTURE2DMS = 294,              /* TEXTURE2DMS  */
+  YYSYMBOL_ITEXTURE2DMS = 295,             /* ITEXTURE2DMS  */
+  YYSYMBOL_UTEXTURE2DMS = 296,             /* UTEXTURE2DMS  */
+  YYSYMBOL_TEXTURE2DMSARRAY = 297,         /* TEXTURE2DMSARRAY  */
+  YYSYMBOL_ITEXTURE2DMSARRAY = 298,        /* ITEXTURE2DMSARRAY  */
+  YYSYMBOL_UTEXTURE2DMSARRAY = 299,        /* UTEXTURE2DMSARRAY  */
+  YYSYMBOL_F16TEXTURE1D = 300,             /* F16TEXTURE1D  */
+  YYSYMBOL_F16TEXTURE2D = 301,             /* F16TEXTURE2D  */
+  YYSYMBOL_F16TEXTURE3D = 302,             /* F16TEXTURE3D  */
+  YYSYMBOL_F16TEXTURE2DRECT = 303,         /* F16TEXTURE2DRECT  */
+  YYSYMBOL_F16TEXTURECUBE = 304,           /* F16TEXTURECUBE  */
+  YYSYMBOL_F16TEXTURE1DARRAY = 305,        /* F16TEXTURE1DARRAY  */
+  YYSYMBOL_F16TEXTURE2DARRAY = 306,        /* F16TEXTURE2DARRAY  */
+  YYSYMBOL_F16TEXTURECUBEARRAY = 307,      /* F16TEXTURECUBEARRAY  */
+  YYSYMBOL_F16TEXTUREBUFFER = 308,         /* F16TEXTUREBUFFER  */
+  YYSYMBOL_F16TEXTURE2DMS = 309,           /* F16TEXTURE2DMS  */
+  YYSYMBOL_F16TEXTURE2DMSARRAY = 310,      /* F16TEXTURE2DMSARRAY  */
+  YYSYMBOL_SUBPASSINPUT = 311,             /* SUBPASSINPUT  */
+  YYSYMBOL_SUBPASSINPUTMS = 312,           /* SUBPASSINPUTMS  */
+  YYSYMBOL_ISUBPASSINPUT = 313,            /* ISUBPASSINPUT  */
+  YYSYMBOL_ISUBPASSINPUTMS = 314,          /* ISUBPASSINPUTMS  */
+  YYSYMBOL_USUBPASSINPUT = 315,            /* USUBPASSINPUT  */
+  YYSYMBOL_USUBPASSINPUTMS = 316,          /* USUBPASSINPUTMS  */
+  YYSYMBOL_F16SUBPASSINPUT = 317,          /* F16SUBPASSINPUT  */
+  YYSYMBOL_F16SUBPASSINPUTMS = 318,        /* F16SUBPASSINPUTMS  */
+  YYSYMBOL_SPIRV_INSTRUCTION = 319,        /* SPIRV_INSTRUCTION  */
+  YYSYMBOL_SPIRV_EXECUTION_MODE = 320,     /* SPIRV_EXECUTION_MODE  */
+  YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 321,  /* SPIRV_EXECUTION_MODE_ID  */
+  YYSYMBOL_SPIRV_DECORATE = 322,           /* SPIRV_DECORATE  */
+  YYSYMBOL_SPIRV_DECORATE_ID = 323,        /* SPIRV_DECORATE_ID  */
+  YYSYMBOL_SPIRV_DECORATE_STRING = 324,    /* SPIRV_DECORATE_STRING  */
+  YYSYMBOL_SPIRV_TYPE = 325,               /* SPIRV_TYPE  */
+  YYSYMBOL_SPIRV_STORAGE_CLASS = 326,      /* SPIRV_STORAGE_CLASS  */
+  YYSYMBOL_SPIRV_BY_REFERENCE = 327,       /* SPIRV_BY_REFERENCE  */
+  YYSYMBOL_SPIRV_LITERAL = 328,            /* SPIRV_LITERAL  */
+  YYSYMBOL_ATTACHMENTEXT = 329,            /* ATTACHMENTEXT  */
+  YYSYMBOL_IATTACHMENTEXT = 330,           /* IATTACHMENTEXT  */
+  YYSYMBOL_UATTACHMENTEXT = 331,           /* UATTACHMENTEXT  */
+  YYSYMBOL_LEFT_OP = 332,                  /* LEFT_OP  */
+  YYSYMBOL_RIGHT_OP = 333,                 /* RIGHT_OP  */
+  YYSYMBOL_INC_OP = 334,                   /* INC_OP  */
+  YYSYMBOL_DEC_OP = 335,                   /* DEC_OP  */
+  YYSYMBOL_LE_OP = 336,                    /* LE_OP  */
+  YYSYMBOL_GE_OP = 337,                    /* GE_OP  */
+  YYSYMBOL_EQ_OP = 338,                    /* EQ_OP  */
+  YYSYMBOL_NE_OP = 339,                    /* NE_OP  */
+  YYSYMBOL_AND_OP = 340,                   /* AND_OP  */
+  YYSYMBOL_OR_OP = 341,                    /* OR_OP  */
+  YYSYMBOL_XOR_OP = 342,                   /* XOR_OP  */
+  YYSYMBOL_MUL_ASSIGN = 343,               /* MUL_ASSIGN  */
+  YYSYMBOL_DIV_ASSIGN = 344,               /* DIV_ASSIGN  */
+  YYSYMBOL_ADD_ASSIGN = 345,               /* ADD_ASSIGN  */
+  YYSYMBOL_MOD_ASSIGN = 346,               /* MOD_ASSIGN  */
+  YYSYMBOL_LEFT_ASSIGN = 347,              /* LEFT_ASSIGN  */
+  YYSYMBOL_RIGHT_ASSIGN = 348,             /* RIGHT_ASSIGN  */
+  YYSYMBOL_AND_ASSIGN = 349,               /* AND_ASSIGN  */
+  YYSYMBOL_XOR_ASSIGN = 350,               /* XOR_ASSIGN  */
+  YYSYMBOL_OR_ASSIGN = 351,                /* OR_ASSIGN  */
+  YYSYMBOL_SUB_ASSIGN = 352,               /* SUB_ASSIGN  */
+  YYSYMBOL_STRING_LITERAL = 353,           /* STRING_LITERAL  */
+  YYSYMBOL_LEFT_PAREN = 354,               /* LEFT_PAREN  */
+  YYSYMBOL_RIGHT_PAREN = 355,              /* RIGHT_PAREN  */
+  YYSYMBOL_LEFT_BRACKET = 356,             /* LEFT_BRACKET  */
+  YYSYMBOL_RIGHT_BRACKET = 357,            /* RIGHT_BRACKET  */
+  YYSYMBOL_LEFT_BRACE = 358,               /* LEFT_BRACE  */
+  YYSYMBOL_RIGHT_BRACE = 359,              /* RIGHT_BRACE  */
+  YYSYMBOL_DOT = 360,                      /* DOT  */
+  YYSYMBOL_COMMA = 361,                    /* COMMA  */
+  YYSYMBOL_COLON = 362,                    /* COLON  */
+  YYSYMBOL_EQUAL = 363,                    /* EQUAL  */
+  YYSYMBOL_SEMICOLON = 364,                /* SEMICOLON  */
+  YYSYMBOL_BANG = 365,                     /* BANG  */
+  YYSYMBOL_DASH = 366,                     /* DASH  */
+  YYSYMBOL_TILDE = 367,                    /* TILDE  */
+  YYSYMBOL_PLUS = 368,                     /* PLUS  */
+  YYSYMBOL_STAR = 369,                     /* STAR  */
+  YYSYMBOL_SLASH = 370,                    /* SLASH  */
+  YYSYMBOL_PERCENT = 371,                  /* PERCENT  */
+  YYSYMBOL_LEFT_ANGLE = 372,               /* LEFT_ANGLE  */
+  YYSYMBOL_RIGHT_ANGLE = 373,              /* RIGHT_ANGLE  */
+  YYSYMBOL_VERTICAL_BAR = 374,             /* VERTICAL_BAR  */
+  YYSYMBOL_CARET = 375,                    /* CARET  */
+  YYSYMBOL_AMPERSAND = 376,                /* AMPERSAND  */
+  YYSYMBOL_QUESTION = 377,                 /* QUESTION  */
+  YYSYMBOL_INVARIANT = 378,                /* INVARIANT  */
+  YYSYMBOL_HIGH_PRECISION = 379,           /* HIGH_PRECISION  */
+  YYSYMBOL_MEDIUM_PRECISION = 380,         /* MEDIUM_PRECISION  */
+  YYSYMBOL_LOW_PRECISION = 381,            /* LOW_PRECISION  */
+  YYSYMBOL_PRECISION = 382,                /* PRECISION  */
+  YYSYMBOL_PACKED = 383,                   /* PACKED  */
+  YYSYMBOL_RESOURCE = 384,                 /* RESOURCE  */
+  YYSYMBOL_SUPERP = 385,                   /* SUPERP  */
+  YYSYMBOL_FLOATCONSTANT = 386,            /* FLOATCONSTANT  */
+  YYSYMBOL_INTCONSTANT = 387,              /* INTCONSTANT  */
+  YYSYMBOL_UINTCONSTANT = 388,             /* UINTCONSTANT  */
+  YYSYMBOL_BOOLCONSTANT = 389,             /* BOOLCONSTANT  */
+  YYSYMBOL_IDENTIFIER = 390,               /* IDENTIFIER  */
+  YYSYMBOL_TYPE_NAME = 391,                /* TYPE_NAME  */
+  YYSYMBOL_CENTROID = 392,                 /* CENTROID  */
+  YYSYMBOL_IN = 393,                       /* IN  */
+  YYSYMBOL_OUT = 394,                      /* OUT  */
+  YYSYMBOL_INOUT = 395,                    /* INOUT  */
+  YYSYMBOL_STRUCT = 396,                   /* STRUCT  */
+  YYSYMBOL_VOID = 397,                     /* VOID  */
+  YYSYMBOL_WHILE = 398,                    /* WHILE  */
+  YYSYMBOL_BREAK = 399,                    /* BREAK  */
+  YYSYMBOL_CONTINUE = 400,                 /* CONTINUE  */
+  YYSYMBOL_DO = 401,                       /* DO  */
+  YYSYMBOL_ELSE = 402,                     /* ELSE  */
+  YYSYMBOL_FOR = 403,                      /* FOR  */
+  YYSYMBOL_IF = 404,                       /* IF  */
+  YYSYMBOL_DISCARD = 405,                  /* DISCARD  */
+  YYSYMBOL_RETURN = 406,                   /* RETURN  */
+  YYSYMBOL_SWITCH = 407,                   /* SWITCH  */
+  YYSYMBOL_CASE = 408,                     /* CASE  */
+  YYSYMBOL_DEFAULT = 409,                  /* DEFAULT  */
+  YYSYMBOL_TERMINATE_INVOCATION = 410,     /* TERMINATE_INVOCATION  */
+  YYSYMBOL_TERMINATE_RAY = 411,            /* TERMINATE_RAY  */
+  YYSYMBOL_IGNORE_INTERSECTION = 412,      /* IGNORE_INTERSECTION  */
+  YYSYMBOL_UNIFORM = 413,                  /* UNIFORM  */
+  YYSYMBOL_SHARED = 414,                   /* SHARED  */
+  YYSYMBOL_BUFFER = 415,                   /* BUFFER  */
+  YYSYMBOL_TILEIMAGEEXT = 416,             /* TILEIMAGEEXT  */
+  YYSYMBOL_FLAT = 417,                     /* FLAT  */
+  YYSYMBOL_SMOOTH = 418,                   /* SMOOTH  */
+  YYSYMBOL_LAYOUT = 419,                   /* LAYOUT  */
+  YYSYMBOL_DOUBLECONSTANT = 420,           /* DOUBLECONSTANT  */
+  YYSYMBOL_INT16CONSTANT = 421,            /* INT16CONSTANT  */
+  YYSYMBOL_UINT16CONSTANT = 422,           /* UINT16CONSTANT  */
+  YYSYMBOL_FLOAT16CONSTANT = 423,          /* FLOAT16CONSTANT  */
+  YYSYMBOL_INT32CONSTANT = 424,            /* INT32CONSTANT  */
+  YYSYMBOL_UINT32CONSTANT = 425,           /* UINT32CONSTANT  */
+  YYSYMBOL_INT64CONSTANT = 426,            /* INT64CONSTANT  */
+  YYSYMBOL_UINT64CONSTANT = 427,           /* UINT64CONSTANT  */
+  YYSYMBOL_SUBROUTINE = 428,               /* SUBROUTINE  */
+  YYSYMBOL_DEMOTE = 429,                   /* DEMOTE  */
+  YYSYMBOL_PAYLOADNV = 430,                /* PAYLOADNV  */
+  YYSYMBOL_PAYLOADINNV = 431,              /* PAYLOADINNV  */
+  YYSYMBOL_HITATTRNV = 432,                /* HITATTRNV  */
+  YYSYMBOL_CALLDATANV = 433,               /* CALLDATANV  */
+  YYSYMBOL_CALLDATAINNV = 434,             /* CALLDATAINNV  */
+  YYSYMBOL_PAYLOADEXT = 435,               /* PAYLOADEXT  */
+  YYSYMBOL_PAYLOADINEXT = 436,             /* PAYLOADINEXT  */
+  YYSYMBOL_HITATTREXT = 437,               /* HITATTREXT  */
+  YYSYMBOL_CALLDATAEXT = 438,              /* CALLDATAEXT  */
+  YYSYMBOL_CALLDATAINEXT = 439,            /* CALLDATAINEXT  */
+  YYSYMBOL_PATCH = 440,                    /* PATCH  */
+  YYSYMBOL_SAMPLE = 441,                   /* SAMPLE  */
+  YYSYMBOL_NONUNIFORM = 442,               /* NONUNIFORM  */
+  YYSYMBOL_COHERENT = 443,                 /* COHERENT  */
+  YYSYMBOL_VOLATILE = 444,                 /* VOLATILE  */
+  YYSYMBOL_RESTRICT = 445,                 /* RESTRICT  */
+  YYSYMBOL_READONLY = 446,                 /* READONLY  */
+  YYSYMBOL_WRITEONLY = 447,                /* WRITEONLY  */
+  YYSYMBOL_DEVICECOHERENT = 448,           /* DEVICECOHERENT  */
+  YYSYMBOL_QUEUEFAMILYCOHERENT = 449,      /* QUEUEFAMILYCOHERENT  */
+  YYSYMBOL_WORKGROUPCOHERENT = 450,        /* WORKGROUPCOHERENT  */
+  YYSYMBOL_SUBGROUPCOHERENT = 451,         /* SUBGROUPCOHERENT  */
+  YYSYMBOL_NONPRIVATE = 452,               /* NONPRIVATE  */
+  YYSYMBOL_SHADERCALLCOHERENT = 453,       /* SHADERCALLCOHERENT  */
+  YYSYMBOL_NOPERSPECTIVE = 454,            /* NOPERSPECTIVE  */
+  YYSYMBOL_EXPLICITINTERPAMD = 455,        /* EXPLICITINTERPAMD  */
+  YYSYMBOL_PERVERTEXEXT = 456,             /* PERVERTEXEXT  */
+  YYSYMBOL_PERVERTEXNV = 457,              /* PERVERTEXNV  */
+  YYSYMBOL_PERPRIMITIVENV = 458,           /* PERPRIMITIVENV  */
+  YYSYMBOL_PERVIEWNV = 459,                /* PERVIEWNV  */
+  YYSYMBOL_PERTASKNV = 460,                /* PERTASKNV  */
+  YYSYMBOL_PERPRIMITIVEEXT = 461,          /* PERPRIMITIVEEXT  */
+  YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 462,  /* TASKPAYLOADWORKGROUPEXT  */
+  YYSYMBOL_PRECISE = 463,                  /* PRECISE  */
+  YYSYMBOL_YYACCEPT = 464,                 /* $accept  */
+  YYSYMBOL_variable_identifier = 465,      /* variable_identifier  */
+  YYSYMBOL_primary_expression = 466,       /* primary_expression  */
+  YYSYMBOL_postfix_expression = 467,       /* postfix_expression  */
+  YYSYMBOL_integer_expression = 468,       /* integer_expression  */
+  YYSYMBOL_function_call = 469,            /* function_call  */
+  YYSYMBOL_function_call_or_method = 470,  /* function_call_or_method  */
+  YYSYMBOL_function_call_generic = 471,    /* function_call_generic  */
+  YYSYMBOL_function_call_header_no_parameters = 472, /* function_call_header_no_parameters  */
+  YYSYMBOL_function_call_header_with_parameters = 473, /* function_call_header_with_parameters  */
+  YYSYMBOL_function_call_header = 474,     /* function_call_header  */
+  YYSYMBOL_function_identifier = 475,      /* function_identifier  */
+  YYSYMBOL_unary_expression = 476,         /* unary_expression  */
+  YYSYMBOL_unary_operator = 477,           /* unary_operator  */
+  YYSYMBOL_multiplicative_expression = 478, /* multiplicative_expression  */
+  YYSYMBOL_additive_expression = 479,      /* additive_expression  */
+  YYSYMBOL_shift_expression = 480,         /* shift_expression  */
+  YYSYMBOL_relational_expression = 481,    /* relational_expression  */
+  YYSYMBOL_equality_expression = 482,      /* equality_expression  */
+  YYSYMBOL_and_expression = 483,           /* and_expression  */
+  YYSYMBOL_exclusive_or_expression = 484,  /* exclusive_or_expression  */
+  YYSYMBOL_inclusive_or_expression = 485,  /* inclusive_or_expression  */
+  YYSYMBOL_logical_and_expression = 486,   /* logical_and_expression  */
+  YYSYMBOL_logical_xor_expression = 487,   /* logical_xor_expression  */
+  YYSYMBOL_logical_or_expression = 488,    /* logical_or_expression  */
+  YYSYMBOL_conditional_expression = 489,   /* conditional_expression  */
+  YYSYMBOL_490_1 = 490,                    /* $@1  */
+  YYSYMBOL_assignment_expression = 491,    /* assignment_expression  */
+  YYSYMBOL_assignment_operator = 492,      /* assignment_operator  */
+  YYSYMBOL_expression = 493,               /* expression  */
+  YYSYMBOL_constant_expression = 494,      /* constant_expression  */
+  YYSYMBOL_declaration = 495,              /* declaration  */
+  YYSYMBOL_block_structure = 496,          /* block_structure  */
+  YYSYMBOL_497_2 = 497,                    /* $@2  */
+  YYSYMBOL_identifier_list = 498,          /* identifier_list  */
+  YYSYMBOL_function_prototype = 499,       /* function_prototype  */
+  YYSYMBOL_function_declarator = 500,      /* function_declarator  */
+  YYSYMBOL_function_header_with_parameters = 501, /* function_header_with_parameters  */
+  YYSYMBOL_function_header = 502,          /* function_header  */
+  YYSYMBOL_parameter_declarator = 503,     /* parameter_declarator  */
+  YYSYMBOL_parameter_declaration = 504,    /* parameter_declaration  */
+  YYSYMBOL_parameter_type_specifier = 505, /* parameter_type_specifier  */
+  YYSYMBOL_init_declarator_list = 506,     /* init_declarator_list  */
+  YYSYMBOL_single_declaration = 507,       /* single_declaration  */
+  YYSYMBOL_fully_specified_type = 508,     /* fully_specified_type  */
+  YYSYMBOL_invariant_qualifier = 509,      /* invariant_qualifier  */
+  YYSYMBOL_interpolation_qualifier = 510,  /* interpolation_qualifier  */
+  YYSYMBOL_layout_qualifier = 511,         /* layout_qualifier  */
+  YYSYMBOL_layout_qualifier_id_list = 512, /* layout_qualifier_id_list  */
+  YYSYMBOL_layout_qualifier_id = 513,      /* layout_qualifier_id  */
+  YYSYMBOL_precise_qualifier = 514,        /* precise_qualifier  */
+  YYSYMBOL_type_qualifier = 515,           /* type_qualifier  */
+  YYSYMBOL_single_type_qualifier = 516,    /* single_type_qualifier  */
+  YYSYMBOL_storage_qualifier = 517,        /* storage_qualifier  */
+  YYSYMBOL_non_uniform_qualifier = 518,    /* non_uniform_qualifier  */
+  YYSYMBOL_type_name_list = 519,           /* type_name_list  */
+  YYSYMBOL_type_specifier = 520,           /* type_specifier  */
+  YYSYMBOL_array_specifier = 521,          /* array_specifier  */
+  YYSYMBOL_type_parameter_specifier_opt = 522, /* type_parameter_specifier_opt  */
+  YYSYMBOL_type_parameter_specifier = 523, /* type_parameter_specifier  */
+  YYSYMBOL_type_parameter_specifier_list = 524, /* type_parameter_specifier_list  */
+  YYSYMBOL_type_specifier_nonarray = 525,  /* type_specifier_nonarray  */
+  YYSYMBOL_precision_qualifier = 526,      /* precision_qualifier  */
+  YYSYMBOL_struct_specifier = 527,         /* struct_specifier  */
+  YYSYMBOL_528_3 = 528,                    /* $@3  */
+  YYSYMBOL_529_4 = 529,                    /* $@4  */
+  YYSYMBOL_struct_declaration_list = 530,  /* struct_declaration_list  */
+  YYSYMBOL_struct_declaration = 531,       /* struct_declaration  */
+  YYSYMBOL_struct_declarator_list = 532,   /* struct_declarator_list  */
+  YYSYMBOL_struct_declarator = 533,        /* struct_declarator  */
+  YYSYMBOL_initializer = 534,              /* initializer  */
+  YYSYMBOL_initializer_list = 535,         /* initializer_list  */
+  YYSYMBOL_declaration_statement = 536,    /* declaration_statement  */
+  YYSYMBOL_statement = 537,                /* statement  */
+  YYSYMBOL_simple_statement = 538,         /* simple_statement  */
+  YYSYMBOL_demote_statement = 539,         /* demote_statement  */
+  YYSYMBOL_compound_statement = 540,       /* compound_statement  */
+  YYSYMBOL_541_5 = 541,                    /* $@5  */
+  YYSYMBOL_542_6 = 542,                    /* $@6  */
+  YYSYMBOL_statement_no_new_scope = 543,   /* statement_no_new_scope  */
+  YYSYMBOL_statement_scoped = 544,         /* statement_scoped  */
+  YYSYMBOL_545_7 = 545,                    /* $@7  */
+  YYSYMBOL_546_8 = 546,                    /* $@8  */
+  YYSYMBOL_compound_statement_no_new_scope = 547, /* compound_statement_no_new_scope  */
+  YYSYMBOL_statement_list = 548,           /* statement_list  */
+  YYSYMBOL_expression_statement = 549,     /* expression_statement  */
+  YYSYMBOL_selection_statement = 550,      /* selection_statement  */
+  YYSYMBOL_selection_statement_nonattributed = 551, /* selection_statement_nonattributed  */
+  YYSYMBOL_selection_rest_statement = 552, /* selection_rest_statement  */
+  YYSYMBOL_condition = 553,                /* condition  */
+  YYSYMBOL_switch_statement = 554,         /* switch_statement  */
+  YYSYMBOL_switch_statement_nonattributed = 555, /* switch_statement_nonattributed  */
+  YYSYMBOL_556_9 = 556,                    /* $@9  */
+  YYSYMBOL_switch_statement_list = 557,    /* switch_statement_list  */
+  YYSYMBOL_case_label = 558,               /* case_label  */
+  YYSYMBOL_iteration_statement = 559,      /* iteration_statement  */
+  YYSYMBOL_iteration_statement_nonattributed = 560, /* iteration_statement_nonattributed  */
+  YYSYMBOL_561_10 = 561,                   /* $@10  */
+  YYSYMBOL_562_11 = 562,                   /* $@11  */
+  YYSYMBOL_563_12 = 563,                   /* $@12  */
+  YYSYMBOL_for_init_statement = 564,       /* for_init_statement  */
+  YYSYMBOL_conditionopt = 565,             /* conditionopt  */
+  YYSYMBOL_for_rest_statement = 566,       /* for_rest_statement  */
+  YYSYMBOL_jump_statement = 567,           /* jump_statement  */
+  YYSYMBOL_translation_unit = 568,         /* translation_unit  */
+  YYSYMBOL_external_declaration = 569,     /* external_declaration  */
+  YYSYMBOL_function_definition = 570,      /* function_definition  */
+  YYSYMBOL_571_13 = 571,                   /* $@13  */
+  YYSYMBOL_attribute = 572,                /* attribute  */
+  YYSYMBOL_attribute_list = 573,           /* attribute_list  */
+  YYSYMBOL_single_attribute = 574,         /* single_attribute  */
+  YYSYMBOL_spirv_requirements_list = 575,  /* spirv_requirements_list  */
+  YYSYMBOL_spirv_requirements_parameter = 576, /* spirv_requirements_parameter  */
+  YYSYMBOL_spirv_extension_list = 577,     /* spirv_extension_list  */
+  YYSYMBOL_spirv_capability_list = 578,    /* spirv_capability_list  */
+  YYSYMBOL_spirv_execution_mode_qualifier = 579, /* spirv_execution_mode_qualifier  */
+  YYSYMBOL_spirv_execution_mode_parameter_list = 580, /* spirv_execution_mode_parameter_list  */
+  YYSYMBOL_spirv_execution_mode_parameter = 581, /* spirv_execution_mode_parameter  */
+  YYSYMBOL_spirv_execution_mode_id_parameter_list = 582, /* spirv_execution_mode_id_parameter_list  */
+  YYSYMBOL_spirv_storage_class_qualifier = 583, /* spirv_storage_class_qualifier  */
+  YYSYMBOL_spirv_decorate_qualifier = 584, /* spirv_decorate_qualifier  */
+  YYSYMBOL_spirv_decorate_parameter_list = 585, /* spirv_decorate_parameter_list  */
+  YYSYMBOL_spirv_decorate_parameter = 586, /* spirv_decorate_parameter  */
+  YYSYMBOL_spirv_decorate_id_parameter_list = 587, /* spirv_decorate_id_parameter_list  */
+  YYSYMBOL_spirv_decorate_id_parameter = 588, /* spirv_decorate_id_parameter  */
+  YYSYMBOL_spirv_decorate_string_parameter_list = 589, /* spirv_decorate_string_parameter_list  */
+  YYSYMBOL_spirv_type_specifier = 590,     /* spirv_type_specifier  */
+  YYSYMBOL_spirv_type_parameter_list = 591, /* spirv_type_parameter_list  */
+  YYSYMBOL_spirv_type_parameter = 592,     /* spirv_type_parameter  */
+  YYSYMBOL_spirv_instruction_qualifier = 593, /* spirv_instruction_qualifier  */
+  YYSYMBOL_spirv_instruction_qualifier_list = 594, /* spirv_instruction_qualifier_list  */
+  YYSYMBOL_spirv_instruction_qualifier_id = 595 /* spirv_instruction_qualifier_id  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -731,7 +738,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 735 "MachineIndependent/glslang_tab.cpp"
+#line 742 "MachineIndependent/glslang_tab.cpp"
 
 
 #ifdef short
@@ -1035,21 +1042,21 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  445
+#define YYFINAL  451
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12503
+#define YYLAST   12670
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  458
+#define YYNTOKENS  464
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  131
+#define YYNNTS  132
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  686
+#define YYNRULES  698
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  932
+#define YYNSTATES  944
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   712
+#define YYMAXUTOK   718
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1134,82 +1141,83 @@
      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
+     455,   456,   457,   458,   459,   460,   461,   462,   463
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   392,   392,   398,   401,   406,   409,   412,   416,   420,
-     423,   427,   431,   435,   439,   443,   447,   453,   461,   464,
-     467,   470,   473,   478,   486,   493,   500,   506,   510,   517,
-     520,   526,   533,   543,   551,   556,   584,   593,   599,   603,
-     607,   627,   628,   629,   630,   636,   637,   642,   647,   656,
-     657,   662,   670,   671,   677,   686,   687,   692,   697,   702,
-     710,   711,   720,   732,   733,   742,   743,   752,   753,   762,
-     763,   771,   772,   780,   781,   789,   790,   790,   808,   809,
-     825,   829,   833,   837,   842,   846,   850,   854,   858,   862,
-     866,   873,   876,   887,   894,   900,   907,   913,   918,   925,
-     929,   933,   937,   942,   947,   956,   956,   967,   971,   978,
-     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,  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
+       0,   394,   394,   400,   403,   408,   411,   414,   418,   422,
+     425,   429,   433,   437,   441,   445,   449,   455,   463,   466,
+     469,   472,   475,   480,   488,   495,   502,   508,   512,   519,
+     522,   528,   535,   545,   553,   558,   586,   595,   601,   605,
+     609,   629,   630,   631,   632,   638,   639,   644,   649,   658,
+     659,   664,   672,   673,   679,   688,   689,   694,   699,   704,
+     712,   713,   722,   734,   735,   744,   745,   754,   755,   764,
+     765,   773,   774,   782,   783,   791,   792,   792,   810,   811,
+     827,   831,   835,   839,   844,   848,   852,   856,   860,   864,
+     868,   875,   878,   889,   896,   902,   909,   915,   920,   927,
+     931,   935,   939,   944,   949,   958,   958,   969,   973,   980,
+     984,   990,   996,  1006,  1009,  1016,  1024,  1044,  1067,  1082,
+    1107,  1118,  1128,  1138,  1148,  1157,  1160,  1164,  1168,  1173,
+    1181,  1188,  1193,  1198,  1203,  1212,  1222,  1249,  1258,  1265,
+    1273,  1280,  1287,  1295,  1303,  1313,  1323,  1330,  1341,  1347,
+    1350,  1357,  1361,  1365,  1374,  1384,  1387,  1398,  1401,  1404,
+    1408,  1412,  1417,  1421,  1424,  1429,  1433,  1438,  1447,  1451,
+    1456,  1462,  1468,  1475,  1480,  1485,  1493,  1499,  1511,  1525,
+    1531,  1536,  1544,  1552,  1560,  1568,  1576,  1584,  1592,  1600,
+    1608,  1615,  1622,  1626,  1631,  1636,  1641,  1646,  1651,  1656,
+    1660,  1664,  1668,  1672,  1678,  1684,  1696,  1703,  1706,  1715,
+    1720,  1730,  1735,  1743,  1747,  1757,  1760,  1766,  1772,  1779,
+    1789,  1793,  1797,  1801,  1806,  1810,  1815,  1820,  1825,  1830,
+    1835,  1840,  1845,  1850,  1855,  1861,  1867,  1873,  1878,  1883,
+    1888,  1893,  1898,  1903,  1908,  1913,  1918,  1923,  1928,  1934,
+    1941,  1946,  1951,  1956,  1961,  1966,  1971,  1976,  1981,  1986,
+    1991,  1996,  2004,  2012,  2020,  2026,  2032,  2038,  2044,  2050,
+    2056,  2062,  2068,  2074,  2080,  2086,  2092,  2098,  2104,  2110,
+    2116,  2122,  2128,  2134,  2140,  2146,  2152,  2158,  2164,  2170,
+    2176,  2182,  2188,  2194,  2200,  2206,  2212,  2218,  2226,  2234,
+    2242,  2250,  2258,  2266,  2274,  2282,  2290,  2298,  2306,  2314,
+    2320,  2326,  2332,  2338,  2344,  2350,  2356,  2362,  2368,  2374,
+    2380,  2386,  2392,  2398,  2404,  2410,  2416,  2422,  2428,  2434,
+    2440,  2446,  2452,  2458,  2464,  2470,  2476,  2482,  2488,  2494,
+    2500,  2506,  2512,  2518,  2524,  2530,  2534,  2538,  2542,  2547,
+    2553,  2558,  2563,  2568,  2573,  2578,  2583,  2589,  2594,  2599,
+    2604,  2609,  2614,  2620,  2626,  2632,  2638,  2644,  2650,  2656,
+    2662,  2668,  2674,  2680,  2686,  2692,  2698,  2703,  2708,  2713,
+    2718,  2723,  2728,  2734,  2739,  2744,  2749,  2754,  2759,  2764,
+    2769,  2775,  2780,  2785,  2790,  2795,  2800,  2805,  2810,  2815,
+    2820,  2825,  2830,  2835,  2840,  2845,  2851,  2856,  2861,  2867,
+    2873,  2878,  2883,  2888,  2894,  2899,  2904,  2909,  2915,  2920,
+    2925,  2930,  2936,  2941,  2946,  2951,  2957,  2963,  2969,  2975,
+    2980,  2986,  2992,  2998,  3003,  3008,  3013,  3018,  3023,  3029,
+    3034,  3039,  3044,  3050,  3055,  3060,  3065,  3071,  3076,  3081,
+    3086,  3092,  3097,  3102,  3107,  3113,  3118,  3123,  3128,  3134,
+    3139,  3144,  3149,  3155,  3160,  3165,  3170,  3176,  3181,  3186,
+    3191,  3197,  3202,  3207,  3212,  3218,  3223,  3228,  3233,  3239,
+    3244,  3249,  3254,  3260,  3265,  3270,  3275,  3281,  3286,  3291,
+    3296,  3302,  3307,  3312,  3317,  3323,  3328,  3333,  3338,  3343,
+    3348,  3353,  3358,  3363,  3368,  3373,  3378,  3383,  3388,  3393,
+    3398,  3403,  3408,  3413,  3418,  3423,  3428,  3433,  3438,  3443,
+    3449,  3455,  3461,  3467,  3473,  3479,  3485,  3492,  3499,  3505,
+    3511,  3517,  3523,  3529,  3535,  3541,  3545,  3550,  3555,  3571,
+    3576,  3581,  3589,  3589,  3600,  3600,  3610,  3613,  3626,  3648,
+    3675,  3679,  3685,  3690,  3701,  3705,  3711,  3717,  3728,  3731,
+    3738,  3742,  3743,  3749,  3750,  3751,  3752,  3753,  3754,  3755,
+    3757,  3763,  3772,  3773,  3777,  3773,  3789,  3790,  3794,  3794,
+    3801,  3801,  3815,  3818,  3826,  3834,  3845,  3846,  3850,  3854,
+    3862,  3869,  3873,  3881,  3885,  3898,  3902,  3910,  3910,  3930,
+    3933,  3939,  3951,  3963,  3967,  3975,  3975,  3990,  3990,  4008,
+    4008,  4029,  4032,  4038,  4041,  4047,  4051,  4058,  4063,  4068,
+    4075,  4078,  4082,  4087,  4091,  4101,  4105,  4114,  4117,  4121,
+    4130,  4130,  4172,  4177,  4180,  4185,  4188,  4195,  4198,  4203,
+    4206,  4211,  4214,  4219,  4222,  4227,  4231,  4236,  4240,  4245,
+    4249,  4256,  4259,  4264,  4267,  4270,  4273,  4276,  4281,  4290,
+    4301,  4306,  4314,  4318,  4323,  4327,  4332,  4336,  4341,  4345,
+    4352,  4355,  4360,  4363,  4366,  4369,  4374,  4377,  4382,  4388,
+    4391,  4394,  4397,  4402,  4406,  4411,  4415,  4420,  4424,  4431,
+    4434,  4439,  4442,  4447,  4450,  4456,  4459,  4464,  4467
 };
 #endif
 
@@ -1254,9 +1262,9 @@
   "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3",
   "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2",
   "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT",
-  "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV",
-  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
-  "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY",
+  "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "HITOBJECTNV",
+  "HITOBJECTATTRNV", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
+  "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY",
   "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW", "SAMPLER2DRECT",
   "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT", "USAMPLER2DRECT",
   "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER", "SAMPLER2DMS",
@@ -1299,33 +1307,34 @@
   "F16SUBPASSINPUTMS", "SPIRV_INSTRUCTION", "SPIRV_EXECUTION_MODE",
   "SPIRV_EXECUTION_MODE_ID", "SPIRV_DECORATE", "SPIRV_DECORATE_ID",
   "SPIRV_DECORATE_STRING", "SPIRV_TYPE", "SPIRV_STORAGE_CLASS",
-  "SPIRV_BY_REFERENCE", "SPIRV_LITERAL", "LEFT_OP", "RIGHT_OP", "INC_OP",
-  "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP",
-  "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN",
-  "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN",
-  "SUB_ASSIGN", "STRING_LITERAL", "LEFT_PAREN", "RIGHT_PAREN",
-  "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT",
-  "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS",
-  "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR",
-  "CARET", "AMPERSAND", "QUESTION", "INVARIANT", "HIGH_PRECISION",
-  "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE",
-  "SUPERP", "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
+  "SPIRV_BY_REFERENCE", "SPIRV_LITERAL", "ATTACHMENTEXT", "IATTACHMENTEXT",
+  "UATTACHMENTEXT", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
+  "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
+  "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
+  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "STRING_LITERAL",
+  "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET",
+  "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL",
+  "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT",
+  "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND",
+  "QUESTION", "INVARIANT", "HIGH_PRECISION", "MEDIUM_PRECISION",
+  "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP",
+  "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT",
   "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT",
   "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF",
   "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION",
   "TERMINATE_RAY", "IGNORE_INTERSECTION", "UNIFORM", "SHARED", "BUFFER",
-  "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT",
-  "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT",
-  "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV",
-  "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT",
-  "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH",
-  "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
-  "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT",
-  "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE",
-  "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD",
-  "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV",
-  "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", "PRECISE",
-  "$accept", "variable_identifier", "primary_expression",
+  "TILEIMAGEEXT", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT",
+  "INT16CONSTANT", "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT",
+  "UINT32CONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE",
+  "DEMOTE", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "CALLDATANV",
+  "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT",
+  "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM",
+  "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY",
+  "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT",
+  "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE",
+  "EXPLICITINTERPAMD", "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",
   "function_call_header_no_parameters",
@@ -1370,7 +1379,7 @@
   "spirv_execution_mode_id_parameter_list",
   "spirv_storage_class_qualifier", "spirv_decorate_qualifier",
   "spirv_decorate_parameter_list", "spirv_decorate_parameter",
-  "spirv_decorate_id_parameter_list",
+  "spirv_decorate_id_parameter_list", "spirv_decorate_id_parameter",
   "spirv_decorate_string_parameter_list", "spirv_type_specifier",
   "spirv_type_parameter_list", "spirv_type_parameter",
   "spirv_instruction_qualifier", "spirv_instruction_qualifier_list",
@@ -1434,16 +1443,17 @@
      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,   710,   711,   712
+     705,   706,   707,   708,   709,   710,   711,   712,   713,   714,
+     715,   716,   717,   718
 };
 #endif
 
-#define YYPACT_NINF (-813)
+#define YYPACT_NINF (-871)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-573)
+#define YYTABLE_NINF (-693)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1452,100 +1462,101 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    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
+    4635,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -295,  -293,  -284,
+    -273,  -184,  -182,  -129,  -127,  -871,  -871,  -871,  -871,  -871,
+    -258,  -871,  -871,  -871,  -871,  -871,   -43,  -871,  -871,  -871,
+    -871,  -871,  -324,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -119,  -117,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -310,  -323,  -237,
+    -128,  7862,  -235,  -871,  -106,  -871,  -871,  -871,  -871,  5557,
+    -871,  -871,  -871,  -871,  -124,  -871,  -871,   947,  -871,  -871,
+    7862,   -93,  -871,  -871,  -871,  6018,   -99,  -256,  -138,  -122,
+    -121,  -120,   -99,  -104,   -78, 12273,  -871,  -100,  -339,   -60,
+    -871,  -265,  -871,   -85,   -17,  7862,  -871,  -871,  -871,  7862,
+     -49,   -40,  -871,  -307,  -871,  -236,  -871,  -871, 10956,     1,
+    -871,  -871,  -871,     3,   -31,  7862,  -871,    -4,    -2,     4,
+    -871,  -259,  -871,  -228,    -1,     5,     6,     8,  -212,    10,
+      12,    13,    14,    15,    18,  -209,    17,    19,    27,  -313,
+    -871,    20,  7862,  -871,    22,  -871,  -207,  -871,  -871,  -202,
+    9200,  -871,  -261,  1408,  -871,  -871,  -871,  -871,  -871,     1,
+    -263,  -871,  9639,  -249,  -871,   -27,  -871,  -111, 10956, 10956,
+    -871, 10956,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -277,  -871,  -871,  -871,    28,  -200, 11395,    32,  -871,
+   10956,  -871,  -871,  -321,    26,   -17,    33,  -871,  -320,   -99,
+    -871,   -22,  -871,  -300,    37,  -102, 10956,   -74,  -871,  -143,
+     -73,  -148,   -69,    35,   -68,   -99,  -871, 11834,  -871,   -67,
+   10956,    38,   -78,  -871,  7862,    16,  6479,  -871,  7862, 10956,
+    -871,  -339,  -871,    21,  -871,  -871,   -26,  -260,   -55,  -309,
+     -14,   -12,    23,    30,    49,    52,  -312,    40, 10078,  -871,
+      42,  -871,  -871,    48,    41,    56,  -871,    67,    69,    63,
+   10517,    75, 10956,    68,    70,    73,    74,    76,  -167,  -871,
+    -871,  -107,  -871,  -323,    77,    78,  -871,  -871,  -871,  -871,
+    -871,  1869,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  5096,    26,  9639,  -240,  8322,  -871,  -871,  9639,  7862,
+    -871,    43,  -871,  -871,  -871,  -199,  -871,  -871, 10956,    51,
+    -871,  -871, 10956,    87,  -871,  -871,  -871, 10956,  -871,  -871,
+    -871,  -315,  -871,  -871,  -190,    80,  -871,  -871,  -871,  -871,
+    -871,  -871,  -187,  -871,  -168,  -871,  -871,  -166,    84,  -871,
+    -871,  -871,  -871,  -163,  -871,  -161,  -871,  -871,  -871,  -871,
+    -871,  -156,  -871,    85,  -871,  -154,    86,  -153,    80,  -871,
+    -271,  -152,  -871,    94,    96,  -871,  -871,    16,     1,   -35,
+    -871,  -871,  -871,  6940,  -871,  -871,  -871, 10956, 10956, 10956,
+   10956, 10956, 10956, 10956, 10956, 10956, 10956, 10956, 10956, 10956,
+   10956, 10956, 10956, 10956, 10956, 10956,  -871,  -871,  -871,    95,
+    -871,  2330,  -871,  -871,  -871,  2330,  -871, 10956,  -871,  -871,
+     -30, 10956,  -171,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871, 10956,
+   10956,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  9639,  -871,
+    -871,  -201,  -871,  7401,  -871,  -871,    97,    92,  -871,  -871,
+    -871,  -871,  -871,  -188,  -131,  -871,  -311,  -871,  -300,  -871,
+    -300,  -871, 10956, 10956,  -871,  -143,  -871,  -143,  -871,  -148,
+    -148,  -871,   103,    35,  -871, 11834,  -871, 10956,  -871,  -871,
+     -29,    26,    16,  -871,  -871,  -871,  -871,  -871,   -26,   -26,
+    -260,  -260,   -55,   -55,   -55,   -55,  -309,  -309,   -14,   -12,
+      23,    30,    49,    52, 10956,  -871,  2330,  4174,    59,  3713,
+    -149,  -871,  -145,  -871,  -871,  -871,  -871,  -871,  8761,  -871,
+    -871,  -871,   105,  -871,    72,  -871,  -144,  -871,  -142,  -871,
+    -141,  -871,  -140,  -871,  -137,  -133,  -871,  -871,  -871,   -15,
+     101,    92,    71,   107,   109,  -871,  -871,  4174,   108,  -871,
+    -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+   10956,  -871,   102,  2791, 10956,  -871,   104,   114,    79,   112,
+    3252,  -871,   113,  -871,  9639,  -871,  -871,  -871,  -132, 10956,
+    2791,   108,  -871,  -871,  2330,  -871,   110,    92,  -871,  -871,
+    2330,   116,  -871,  -871
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1553,138 +1564,139 @@
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       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,
+       0,   168,   224,   222,   223,   221,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   225,   226,   227,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     350,   351,   352,   353,   354,   355,   356,   376,   377,   378,
+     379,   380,   381,   382,   391,   404,   405,   392,   393,   395,
+     394,   396,   397,   398,   399,   400,   401,   402,   403,   177,
+     178,   250,   251,   249,   252,   259,   260,   257,   258,   255,
+     256,   253,   254,   282,   283,   284,   294,   295,   296,   279,
+     280,   281,   291,   292,   293,   276,   277,   278,   288,   289,
+     290,   273,   274,   275,   285,   286,   287,   261,   262,   263,
+     297,   298,   299,   264,   265,   266,   309,   310,   311,   267,
+     268,   269,   321,   322,   323,   270,   271,   272,   333,   334,
+     335,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   324,
+     325,   326,   327,   328,   329,   330,   331,   332,   336,   337,
+     338,   339,   340,   341,   342,   343,   344,   348,   345,   346,
+     347,   532,   533,   534,   536,   182,   360,   361,   384,   387,
+     349,   358,   359,   375,   357,   406,   407,   410,   411,   412,
+     414,   415,   416,   418,   419,   420,   422,   423,   519,   520,
+     383,   385,   386,   362,   363,   364,   408,   365,   369,   370,
+     373,   413,   417,   421,   366,   367,   371,   372,   409,   368,
+     374,   453,   455,   456,   457,   459,   460,   461,   463,   464,
+     465,   467,   468,   469,   471,   472,   473,   475,   476,   477,
+     479,   480,   481,   483,   484,   485,   487,   488,   489,   491,
+     492,   493,   495,   496,   454,   458,   462,   466,   470,   478,
+     482,   486,   474,   490,   494,   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,
+     512,   513,   514,   515,   516,   517,   518,   388,   389,   390,
+     424,   433,   435,   429,   434,   436,   437,   439,   440,   441,
+     443,   444,   445,   447,   448,   449,   451,   452,   425,   426,
+     427,   438,   428,   430,   431,   432,   442,   446,   450,   524,
+     525,   528,   529,   530,   531,   526,   527,     0,     0,     0,
+       0,     0,     0,     0,     0,   166,   167,   521,   522,   523,
+       0,   629,   137,   539,   540,   541,     0,   538,   172,   170,
+     171,   169,     0,   220,   173,   175,   176,   174,   139,   138,
+       0,   203,   184,   186,   181,   188,   190,   185,   187,   183,
+     189,   191,   179,   180,   206,   192,   199,   200,   201,   202,
+     193,   194,   195,   196,   197,   198,   140,   141,   143,   142,
+     144,   146,   147,   145,   205,   154,   628,     0,   630,     0,
+     114,   113,     0,   125,   130,   161,   160,   158,   162,     0,
+     155,   157,   163,   135,   216,   159,   537,     0,   625,   627,
+       0,     0,   164,   165,   535,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   544,     0,     0,     0,
+      99,     0,    94,     0,   109,     0,   121,   115,   123,     0,
+     124,     0,    97,   131,   102,     0,   156,   136,     0,   209,
+     215,     1,   626,     0,     0,     0,    96,     0,     0,     0,
+     637,     0,   695,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   635,     0,
+     633,     0,     0,   542,   151,   153,     0,   149,   207,     0,
+       0,   100,     0,     0,   631,   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,   218,
+       0,    36,    34,     0,   210,   111,     0,    95,     0,     0,
+     693,     0,   645,     0,     0,     0,     0,     0,   662,     0,
+       0,     0,     0,     0,     0,     0,   687,     0,   660,     0,
+       0,     0,     0,    98,     0,     0,     0,   546,     0,     0,
+     148,     0,   204,     0,   211,    45,    49,    52,    55,    60,
+      63,    65,    67,    69,    71,    73,    75,     0,     0,   101,
+     573,   582,   586,     0,     0,     0,   607,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    45,    78,
+      91,     0,   560,     0,   163,   135,   563,   584,   562,   570,
+     561,     0,   564,   565,   588,   566,   595,   567,   568,   603,
+     569,     0,   119,     0,   127,     0,   554,   134,     0,     0,
+     107,     0,   104,    38,    39,     0,    22,    23,     0,     0,
+      28,    27,     0,   220,    31,    33,    40,     0,   217,   112,
+     697,     0,   698,   638,     0,     0,   696,   657,   653,   654,
+     655,   656,     0,   651,     0,    93,   658,     0,     0,   672,
+     673,   674,   675,     0,   670,     0,   679,   680,   681,   682,
+     678,     0,   676,     0,   683,     0,     0,     0,     2,   691,
+     216,     0,   689,     0,     0,   632,   634,     0,   552,     0,
+     550,   545,   547,     0,   152,   150,   208,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     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
+       0,     0,     0,     0,     0,     0,    76,   212,   213,     0,
+     572,     0,   605,   618,   617,     0,   609,     0,   621,   619,
+       0,     0,     0,   602,   622,   623,   624,   571,    81,    82,
+      84,    83,    86,    87,    88,    89,    90,    85,    80,     0,
+       0,   587,   583,   585,   589,   596,   604,   129,     0,   557,
+     558,     0,   133,     0,   108,     4,     0,    24,    21,    32,
+     219,   641,   643,     0,     0,   694,     0,   647,     0,   646,
+       0,   649,     0,     0,   664,     0,   663,     0,   666,     0,
+       0,   668,     0,     0,   688,     0,   685,     0,   661,   636,
+       0,   553,     0,   548,   543,    46,    47,    48,    51,    50,
+      53,    54,    58,    59,    56,    57,    61,    62,    64,    66,
+      68,    70,    72,    74,     0,   214,   574,     0,     0,     0,
+       0,   620,     0,   601,    79,    92,   128,   555,     0,   106,
+      19,   639,     0,   640,     0,   652,     0,   659,     0,   671,
+       0,   677,     0,   684,     0,     0,   690,   549,   551,     0,
+       0,   593,     0,     0,     0,   612,   611,   614,   580,   597,
+     556,   559,   642,   644,   648,   650,   665,   667,   669,   686,
+       0,   575,     0,     0,     0,   613,     0,     0,   592,     0,
+       0,   590,     0,    77,     0,   577,   606,   576,     0,   615,
+       0,   580,   579,   581,   599,   594,     0,   616,   610,   591,
+     600,     0,   608,   598
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -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
+    -871,  -544,  -871,  -871,  -871,  -871,  -871,  -871,  -871,  -871,
+    -871,  -871,  -435,  -871,  -382,  -381,  -473,  -384,  -268,  -264,
+    -269,  -267,  -266,  -262,  -871,  -485,  -871,  -498,  -871,  -501,
+    -533,    11,  -871,  -871,  -871,     7,  -394,  -871,  -871,    45,
+      44,    46,  -871,  -871,  -407,  -871,  -871,  -871,  -871,  -101,
+    -871,  -390,  -377,  -871,     9,  -871,     0,  -431,  -871,  -871,
+    -871,  -553,   150,  -871,  -871,  -871,  -552,  -557,  -230,  -344,
+    -613,  -871,  -370,  -625,  -870,  -871,  -427,  -871,  -871,  -436,
+    -434,  -871,  -871,    62,  -730,  -363,  -871,  -136,  -871,  -399,
+    -871,  -135,  -871,  -871,  -871,  -871,  -130,  -871,  -871,  -871,
+    -871,  -871,  -871,  -871,  -871,    93,  -871,  -871,     2,  -871,
+     -71,  -281,  -445,  -871,  -871,  -871,  -306,  -305,  -314,  -871,
+    -871,  -308,  -303,  -304,  -302,  -301,  -871,  -317,  -299,  -871,
+    -398,  -536
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -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
+      -1,   529,   530,   531,   796,   532,   533,   534,   535,   536,
+     537,   538,   618,   540,   586,   587,   588,   589,   590,   591,
+     592,   593,   594,   595,   596,   619,   854,   620,   779,   621,
+     709,   622,   387,   649,   507,   623,   389,   390,   391,   436,
+     437,   438,   392,   393,   394,   395,   396,   397,   486,   487,
+     398,   399,   400,   401,   541,   489,   542,   492,   449,   450,
+     543,   404,   405,   406,   578,   482,   576,   577,   719,   720,
+     647,   791,   626,   627,   628,   629,   630,   751,   890,   926,
+     918,   919,   920,   927,   631,   632,   633,   634,   921,   893,
+     635,   636,   922,   941,   637,   638,   639,   857,   755,   859,
+     897,   916,   917,   640,   407,   408,   409,   433,   641,   479,
+     480,   459,   460,   803,   804,   411,   682,   683,   687,   412,
+     413,   693,   694,   701,   702,   705,   414,   711,   712,   415,
+     461,   462
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1692,877 +1704,107 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     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,
+     403,   439,   410,   454,   646,   597,   783,   388,   454,   402,
+     655,   386,   503,   539,   710,   676,   453,   700,   544,   722,
+     455,   856,   446,   686,   475,   455,   723,   734,   735,   745,
+     787,   676,   790,   670,   426,   792,   671,   714,   801,   664,
+     667,   432,   670,   925,   571,   439,   724,   501,   572,   490,
+     933,   484,   668,   677,   430,   585,   502,   656,   657,   416,
+     925,   417,   446,   736,   737,   746,   427,   672,   642,   644,
+     418,   685,   802,   653,   654,   485,   672,   -35,   446,   658,
+     431,   419,   685,   659,  -692,   685,   678,   679,   680,   681,
+    -692,   490,   574,   490,   685,   598,   550,   793,   424,   491,
+     643,   448,   551,   599,   673,   666,   730,   598,   731,   760,
+     673,   762,   673,   749,   648,   673,   598,   673,   434,   673,
+     673,   585,   504,   788,   673,   505,   441,   552,   506,   442,
+     858,   463,   585,   553,   464,   585,   465,   467,   469,   471,
+     473,   474,   477,   558,   585,   646,   566,   646,   580,   559,
+     646,   674,   567,   582,   581,   661,   795,   797,   867,   583,
+     868,   662,   780,   585,   799,   805,   722,   707,   807,   871,
+     420,   551,   421,   872,   808,   866,   768,   769,   770,   771,
+     772,   773,   774,   775,   776,   777,   574,   809,   574,   811,
+     780,   863,   814,   810,   816,   812,   778,   446,   815,   818,
+     817,   821,   824,   826,   940,   819,   898,   822,   825,   827,
+     899,   904,   780,   905,   906,   907,   780,   808,   908,   812,
+     815,   819,   909,   936,   822,   422,   873,   423,   827,   780,
+     874,   783,   800,   435,   454,   428,   722,   429,   696,   697,
+     698,   699,   520,   689,   690,   691,   692,   453,   448,   466,
+     651,   455,   464,   652,   780,   901,   860,   781,   483,   574,
+     862,   842,   843,   844,   845,   468,   470,   472,   464,   464,
+     464,   456,   710,   493,   710,   700,   700,   732,   733,   877,
+     686,   864,   865,   476,   443,   684,   464,   831,   464,   676,
+     646,   458,   835,   836,   837,   585,   585,   585,   585,   585,
+     585,   585,   585,   585,   585,   585,   585,   585,   585,   585,
+     585,   935,   478,   688,   695,   783,   464,   464,   703,   706,
+     713,   464,   464,   464,   738,   739,   832,   685,   685,   833,
+     488,   780,   832,   574,   861,   887,   333,   334,   335,   330,
+     685,   499,   685,   727,   728,   729,   780,   910,   838,   839,
+     500,   840,   841,   889,   846,   847,   891,   490,   545,   546,
+     547,   548,   554,   650,   740,   549,   555,   556,   675,   557,
+     646,   560,   568,   561,   562,   563,   564,   585,   585,   565,
+     569,   570,   598,   660,   573,   579,   665,   501,   704,   743,
+     585,   440,   585,   671,   744,   715,   891,   747,   741,   447,
+     402,   750,   752,   574,   742,   753,   718,   403,   402,   410,
+     403,   726,   923,   928,   388,   403,   402,   410,   386,   402,
+     754,   756,   457,   757,   402,   481,   646,   758,   937,   761,
+     763,   -36,   -34,   794,   764,   440,   495,   765,   766,   440,
+     767,   798,   -29,   806,   402,   813,   820,   823,   402,   828,
+     892,   829,   855,   780,   870,   447,   883,   894,   902,   903,
+     911,   912,   913,   914,   402,   924,  -578,   455,   929,   930,
+     600,   934,   848,   850,   942,   943,   851,   849,   852,   496,
+     725,   931,   575,   853,   497,   498,   425,   830,   888,   895,
+     892,   402,   932,   625,   938,   494,   896,   939,   915,   878,
+     452,   716,   624,   875,   876,   784,   785,   455,   885,   880,
+       0,   786,   879,     0,     0,     0,   882,   881,     0,     0,
+       0,     0,   884,     0,     0,     0,     0,     0,   886,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   669,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   717,     0,   575,     0,   575,     0,
+       0,     0,     0,   402,     0,   402,     0,   402,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       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,   625,     0,     0,     0,     0,     0,     0,     0,     0,
+     624,   403,     0,     0,     0,     0,     0,     0,     0,   575,
+     402,     0,     0,     0,     0,     0,     0,     0,   402,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     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,   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,   575,     0,     0,     0,     0,     0,     0,
+       0,     0,   402,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   625,     0,     0,     0,   625,     0,     0,     0,     0,
+     624,     0,     0,     0,   624,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     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,   575,     0,     0,     0,     0,     0,     0,
+       0,     0,   402,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        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,   619,     0,   619,     0,   404,
-       0,     0,     0,   618,   618,     0,   618,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   625,   625,     0,   625,
+       0,   410,     0,     0,     0,   624,   624,     0,   624,     0,
        0,     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,     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,   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,   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,   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,   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,   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,     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,     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,   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,
-     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,   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,
-     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,   327,   328,   329,   330,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
-     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,   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,     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,   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,   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,   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,
-       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,
+       0,     0,     0,     0,     0,     0,     0,   625,     0,     0,
+       0,     0,     0,     0,     0,     0,   624,     0,     0,     0,
+       0,     0,     0,   625,     0,     0,     0,     0,     0,     0,
+     625,     0,   624,     0,     0,     0,     0,     0,     0,   624,
+     625,     0,     0,     0,   625,     0,     0,     0,     0,   624,
+     625,     0,     0,   624,     0,     0,     0,   451,     0,   624,
+       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,     0,     0,
+      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,
@@ -2588,155 +1830,74 @@
      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,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
        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,   330,     0,     0,     0,     0,     0,     0,
+       0,   331,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   332,   333,   334,   335,   336,
+       0,     0,     0,     0,     0,     0,     0,     0,   337,   338,
+     339,   340,   341,   342,   343,     0,     0,     0,     0,     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,
+     344,   345,   346,   347,   348,   349,   350,     0,     0,     0,
+       0,     0,     0,     0,     0,   351,     0,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+       0,     0,   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,     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,    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,   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,   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,
+       0,   510,   511,     0,   330,     0,   600,   601,     0,     0,
+       0,     0,   602,   512,   513,   514,   515,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,     0,     0,     0,   516,   517,   518,   519,   520,   337,
+     338,   339,   340,   341,   342,   343,   603,   604,   605,   606,
+       0,   607,   608,   609,   610,   611,   612,   613,   614,   615,
+     616,   344,   345,   346,   347,   348,   349,   350,   521,   522,
+     523,   524,   525,   526,   527,   528,   351,   617,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,   385,     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,
-       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,
+      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,
@@ -2761,1150 +1922,74 @@
      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,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,     0,     0,   508,   509,     0,     0,     0,     0,     0,
        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,   747,   506,
-     507,   508,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   510,   511,     0,   330,     0,   600,   782,     0,
+       0,     0,     0,   602,   512,   513,   514,   515,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   332,   333,   334,
+     335,   336,     0,     0,     0,   516,   517,   518,   519,   520,
+     337,   338,   339,   340,   341,   342,   343,   603,   604,   605,
+     606,     0,   607,   608,   609,   610,   611,   612,   613,   614,
+     615,   616,   344,   345,   346,   347,   348,   349,   350,   521,
+     522,   523,   524,   525,   526,   527,   528,   351,   617,   352,
+     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
+     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,     0,     0,   508,   509,     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,     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,    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,     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,   657,     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,     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,   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,
+       0,     0,     0,   510,   511,     0,   330,     0,   600,     0,
+       0,     0,     0,     0,   602,   512,   513,   514,   515,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
+     334,   335,   336,     0,     0,     0,   516,   517,   518,   519,
+     520,   337,   338,   339,   340,   341,   342,   343,   603,   604,
+     605,   606,     0,   607,   608,   609,   610,   611,   612,   613,
+     614,   615,   616,   344,   345,   346,   347,   348,   349,   350,
+     521,   522,   523,   524,   525,   526,   527,   528,   351,   617,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,   385,     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,     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
-};
-
-static const yytype_int16 yycheck[] =
-{
-       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,   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,    -1,    -1,    -1,    -1,    -1,
-      -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,   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,   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,   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,    -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,   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,
-      -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,    -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,   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,    -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,    -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,
-     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,    -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,
-     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,    -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,   393,    -1,    -1,   396,    -1,   398,   399,
-      -1,    -1,   402,    -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,    -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,
-     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,   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,   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,    -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,    -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,    -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,    -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,   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,
-      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,
+      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,
@@ -3930,154 +2015,73 @@
      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,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,     0,     0,   508,   509,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   510,   511,     0,   330,     0,   493,
+       0,     0,     0,     0,     0,   602,   512,   513,   514,   515,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   332,
+     333,   334,   335,   336,     0,     0,     0,   516,   517,   518,
+     519,   520,   337,   338,   339,   340,   341,   342,   343,   603,
+     604,   605,   606,     0,   607,   608,   609,   610,   611,   612,
+     613,   614,   615,   616,   344,   345,   346,   347,   348,   349,
+     350,   521,   522,   523,   524,   525,   526,   527,   528,   351,
+     617,   352,   353,   354,   355,   356,   357,   358,   359,   360,
+     361,   362,   363,   364,   365,   366,   367,   368,   369,   370,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,   385,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,     0,     0,   508,   509,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   510,   511,     0,   330,     0,
+       0,     0,     0,     0,     0,     0,   602,   512,   513,   514,
+     515,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     332,   333,   334,   335,   336,     0,     0,     0,   516,   517,
+     518,   519,   520,   337,   338,   339,   340,   341,   342,   343,
+     603,   604,   605,   606,     0,   607,   608,   609,   610,   611,
+     612,   613,   614,   615,   616,   344,   345,   346,   347,   348,
+     349,   350,   521,   522,   523,   524,   525,   526,   527,   528,
+     351,   617,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,   382,   383,   384,   385,     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,    -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,
@@ -4103,25 +2107,120 @@
      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,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,     0,     0,   508,   509,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   510,   511,     0,   330,
+       0,     0,     0,     0,     0,     0,     0,   602,   512,   513,
+     514,   515,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,     0,     0,     0,   516,
+     517,   518,   519,   520,   337,   338,   339,   340,   341,   342,
+     343,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   344,   345,   346,   347,
+     348,   349,   350,   521,   522,   523,   524,   525,   526,   527,
+     528,   351,     0,   352,   353,   354,   355,   356,   357,   358,
+     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
+     369,   370,   371,   372,   373,   374,   375,   376,   377,   378,
+     379,   380,   381,   382,   383,   384,   385,     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,     0,     0,     0,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,     0,     0,   508,   509,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   510,   511,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   512,
+     513,   514,   515,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   332,   333,   334,   335,     0,     0,     0,     0,
+     516,   517,   518,   519,   520,   337,   338,   339,   340,   341,
+     342,   343,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   344,   345,   346,
+     347,   348,   349,   350,   521,   522,   523,   524,   525,   526,
+     527,   528,   351,     0,   352,   353,   354,   355,   356,   357,
+     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
+     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
+     378,   379,   380,   381,   382,   383,   384,   385,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   330,     0,     0,     0,     0,     0,     0,     0,   331,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   332,   333,   334,   335,   336,     0,     0,
+       0,     0,     0,     0,     0,     0,   337,   338,   339,   340,
+     341,   342,   343,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   344,   345,
+     346,   347,   348,   349,   350,     0,     0,     0,     0,     0,
+       0,     0,     0,   351,     0,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,   380,   381,   382,   383,   384,   385,     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,    -1,
-      -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      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,
@@ -4146,25 +2245,120 @@
      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,
+     312,   313,   314,   315,   316,     0,     0,     0,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       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,   333,   334,   335,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   337,   338,   339,
+     340,   341,   342,   343,   603,     0,     0,   606,     0,   607,
+     608,     0,     0,   611,     0,     0,     0,     0,     0,   344,
+     345,   346,   347,   348,   349,   350,     0,     0,     0,     0,
+       0,     0,     0,     0,   351,     0,   352,   353,   354,   355,
+     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
+     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   377,   378,   379,   380,   381,   382,   383,   384,   385,
+       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,     0,     0,     0,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   444,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   332,   333,   334,   335,     0,
+       0,     0,     0,     0,     0,     0,     0,   445,   337,   338,
+     339,   340,   341,   342,   343,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     344,   345,   346,   347,   348,   349,   350,     0,     0,     0,
+       0,     0,     0,     0,     0,   351,     0,   352,   353,   354,
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
+     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
+     375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
+     385,     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,     0,     0,     0,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   330,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   337,
+     338,   339,   340,   341,   342,   343,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   344,   345,   346,   347,   348,   349,   350,     0,     0,
+       0,     0,     0,     0,     0,     0,   351,     0,   352,   353,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+     384,   385,     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,    -1,    -1,    63,    64,    65,    66,    67,    68,
+      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,
@@ -4189,15 +2383,1867 @@
      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,
+     309,   310,   311,   312,   313,   314,   315,   316,     0,     0,
+       0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   721,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   332,   333,   334,
+     335,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     337,   338,   339,   340,   341,   342,   343,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   344,   345,   346,   347,   348,   349,   350,     0,
+       0,     0,     0,     0,     0,     0,     0,   351,     0,   352,
+     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
+     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,     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,     0,
+       0,     0,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   834,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
+     334,   335,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   337,   338,   339,   340,   341,   342,   343,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   344,   345,   346,   347,   348,   349,   350,
+       0,     0,     0,     0,     0,     0,     0,     0,   351,     0,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,   380,   381,
+     382,   383,   384,   385,     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,
+       0,     0,     0,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     869,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   332,
+     333,   334,   335,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   337,   338,   339,   340,   341,   342,   343,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   344,   345,   346,   347,   348,   349,
+     350,     0,     0,     0,     0,     0,     0,     0,     0,   351,
+       0,   352,   353,   354,   355,   356,   357,   358,   359,   360,
+     361,   362,   363,   364,   365,   366,   367,   368,   369,   370,
+     371,   372,   373,   374,   375,   376,   377,   378,   379,   380,
+     381,   382,   383,   384,   385,     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,     0,     0,     0,   320,   321,   322,   323,   324,   325,
+     326,   327,   328,   329,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     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,   333,   334,   335,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   337,   338,   339,   340,   341,   342,   343,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   344,   345,   346,   347,   348,
+     349,   350,     0,     0,     0,     0,     0,     0,     0,     0,
+     351,     0,   352,   353,   354,   355,   356,   357,   358,   359,
+     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
+     370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
+     380,   381,   382,   383,   384,   385,     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,     0,
+     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,     0,     0,     0,     0,     0,     0,   323,     0,     0,
+       0,   327,   328,   329,     0,     0,   508,   509,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   510,   511,     0,     0,     0,
+     645,   789,     0,     0,     0,     0,     0,   512,   513,   514,
+     515,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   516,   517,
+     518,   519,   520,   337,     0,     0,     0,     0,   342,   343,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   521,   522,   523,   524,   525,   526,   527,   528,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   364,     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,     0,   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,
+       0,     0,     0,     0,     0,     0,   323,     0,     0,     0,
+     327,   328,   329,     0,     0,   508,   509,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   510,   511,     0,     0,     0,   645,
+     900,     0,     0,     0,     0,     0,   512,   513,   514,   515,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   516,   517,   518,
+     519,   520,   337,     0,     0,     0,     0,   342,   343,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   521,   522,   523,   524,   525,   526,   527,   528,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   364,     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,     0,   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,     0,
+       0,     0,     0,     0,     0,   323,     0,     0,     0,   327,
+     328,   329,     0,     0,   508,   509,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   510,   511,     0,     0,   584,     0,     0,
+       0,     0,     0,     0,     0,   512,   513,   514,   515,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   516,   517,   518,   519,
+     520,   337,     0,     0,     0,     0,   342,   343,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     521,   522,   523,   524,   525,   526,   527,   528,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   364,     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,     0,   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,     0,     0,
+       0,     0,     0,     0,   323,     0,     0,     0,   327,   328,
+     329,     0,     0,   508,   509,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   510,   511,     0,     0,     0,   645,     0,     0,
+       0,     0,     0,     0,   512,   513,   514,   515,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   516,   517,   518,   519,   520,
+     337,     0,     0,     0,     0,   342,   343,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   521,
+     522,   523,   524,   525,   526,   527,   528,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   364,     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,     0,   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,     0,     0,     0,
+       0,     0,     0,   323,     0,     0,     0,   327,   328,   329,
+       0,     0,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   510,   511,     0,     0,   748,     0,     0,     0,     0,
+       0,     0,     0,   512,   513,   514,   515,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   516,   517,   518,   519,   520,   337,
+       0,     0,     0,     0,   342,   343,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   521,   522,
+     523,   524,   525,   526,   527,   528,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     364,     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,     0,   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,     0,     0,     0,     0,
+       0,     0,   323,     0,     0,     0,   327,   328,   329,     0,
+       0,   508,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     510,   511,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   759,   512,   513,   514,   515,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   516,   517,   518,   519,   520,   337,     0,
+       0,     0,     0,   342,   343,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   521,   522,   523,
+     524,   525,   526,   527,   528,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   364,
+       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,     0,   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,     0,     0,     0,     0,     0,
+       0,   323,     0,     0,     0,   327,   328,   329,     0,     0,
+     508,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   510,
+     511,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   512,   513,   514,   515,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   516,   517,   518,   519,   520,   337,     0,     0,
+       0,     0,   342,   343,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   521,   522,   523,   524,
+     525,   526,   527,   528,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,     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,     0,   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,     0,     0,     0,     0,     0,     0,
+     323,     0,     0,     0,   327,   328,   329,     0,     0,   508,
+     509,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   510,   511,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     512,   513,   514,   515,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   516,   517,   518,   519,   520,   337,     0,     0,     0,
+       0,   342,   663,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   521,   522,   523,   524,   525,
+     526,   527,   528,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     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,     0,   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,     0,     0,     0,     0,     0,     0,   323,
+       0,     0,     0,   327,   328,   329,     0,     0,   508,   509,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   510,   511,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   512,
+     513,   514,   515,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     516,   517,   518,   519,   708,   337,     0,     0,     0,     0,
+     342,   343,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   521,   522,   523,   524,   525,   526,
+     527,   528,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   364,     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,
+       0,   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,     0,     0,     0,     0,     0,     0,   323,     0,
+       0,     0,   327,   328,   329,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   337,     0,     0,     0,     0,   342,
+     343
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,   391,     0,   410,   502,   490,   631,     0,   415,     0,
+     511,     0,   443,   448,   567,   551,   410,   561,   449,   576,
+     410,   751,   399,   556,   422,   415,   578,   336,   337,   341,
+     643,   567,   645,   353,   358,   648,   356,   570,   353,   537,
+     361,   364,   353,   913,   357,   435,   579,   354,   361,   356,
+     920,   390,   373,   353,   364,   490,   363,   334,   335,   354,
+     930,   354,   439,   372,   373,   377,   390,   387,   499,   500,
+     354,   556,   387,   508,   509,   414,   387,   354,   455,   356,
+     390,   354,   567,   360,   355,   570,   386,   387,   388,   389,
+     361,   356,   482,   356,   579,   356,   355,   649,   356,   364,
+     363,   372,   361,   364,   549,   540,   366,   356,   368,   610,
+     555,   612,   557,   598,   363,   560,   356,   562,   355,   564,
+     565,   556,   358,   363,   569,   361,   361,   355,   364,   364,
+     755,   387,   567,   361,   390,   570,   417,   418,   419,   420,
+     421,   422,   423,   355,   579,   643,   355,   645,   355,   361,
+     648,   549,   361,   355,   361,   355,   355,   658,   359,   361,
+     361,   361,   361,   598,   662,   355,   723,   565,   355,   357,
+     354,   361,   354,   361,   361,   788,   343,   344,   345,   346,
+     347,   348,   349,   350,   351,   352,   576,   355,   578,   355,
+     361,   362,   355,   361,   355,   361,   363,   574,   361,   355,
+     361,   355,   355,   355,   934,   361,   355,   361,   361,   361,
+     355,   355,   361,   355,   355,   355,   361,   361,   355,   361,
+     361,   361,   355,   355,   361,   354,   357,   354,   361,   361,
+     361,   856,   667,   361,   641,   354,   793,   354,   386,   387,
+     388,   389,   390,   386,   387,   388,   389,   641,   372,   387,
+     361,   641,   390,   364,   361,   868,   757,   364,   358,   649,
+     761,   734,   735,   736,   737,   387,   387,   387,   390,   390,
+     390,   364,   825,   358,   827,   819,   820,   332,   333,   812,
+     813,   779,   780,   387,   390,   387,   390,   718,   390,   825,
+     788,   390,   727,   728,   729,   730,   731,   732,   733,   734,
+     735,   736,   737,   738,   739,   740,   741,   742,   743,   744,
+     745,   924,   390,   387,   387,   940,   390,   390,   387,   387,
+     387,   390,   390,   390,   338,   339,   361,   812,   813,   364,
+     390,   361,   361,   723,   364,   364,   379,   380,   381,   356,
+     825,   390,   827,   369,   370,   371,   361,   362,   730,   731,
+     390,   732,   733,   854,   738,   739,   857,   356,   355,   390,
+     364,   363,   363,   390,   376,   361,   361,   361,   390,   361,
+     868,   361,   355,   361,   361,   361,   361,   812,   813,   361,
+     361,   354,   356,   355,   364,   363,   354,   354,   353,   340,
+     825,   391,   827,   356,   342,   357,   897,   357,   375,   399,
+     391,   359,   354,   793,   374,   364,   390,   407,   399,   407,
+     410,   390,   910,   914,   407,   415,   407,   415,   407,   410,
+     364,   354,   415,   354,   415,   425,   924,   364,   929,   354,
+     362,   354,   354,   390,   364,   435,   434,   364,   364,   439,
+     364,   390,   355,   363,   435,   361,   361,   361,   439,   355,
+     857,   355,   357,   361,   357,   455,   353,   398,   353,   387,
+     359,   390,   355,   354,   455,   363,   358,   857,   364,   355,
+     358,   358,   740,   742,   364,   359,   743,   741,   744,   435,
+     581,   402,   482,   745,   439,   439,   336,   717,   832,   859,
+     897,   482,   919,   493,   930,   433,   859,   931,   897,   813,
+     407,   572,   493,   808,   810,   641,   641,   897,   825,   817,
+      -1,   641,   815,    -1,    -1,    -1,   820,   819,    -1,    -1,
+      -1,    -1,   823,    -1,    -1,    -1,    -1,    -1,   827,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   545,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   574,    -1,   576,    -1,   578,    -1,
+      -1,    -1,    -1,   574,    -1,   576,    -1,   578,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   631,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     631,   641,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   649,
+     641,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   649,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -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,    -1,    -1,    -1,
+      -1,    -1,    -1,   723,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   723,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   751,    -1,    -1,    -1,   755,    -1,    -1,    -1,    -1,
+     751,    -1,    -1,    -1,   755,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   793,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   793,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   856,   857,    -1,   859,
+      -1,   859,    -1,    -1,    -1,   856,   857,    -1,   859,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   897,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   897,    -1,    -1,    -1,
+      -1,    -1,    -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,
+     920,    -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,   920,
+     930,    -1,    -1,    -1,   934,    -1,    -1,    -1,    -1,   930,
+     940,    -1,    -1,   934,    -1,    -1,    -1,     0,    -1,   940,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   356,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   364,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   378,   379,   380,   381,   382,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   391,   392,
+     393,   394,   395,   396,   397,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     413,   414,   415,   416,   417,   418,   419,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   428,    -1,   430,   431,   432,
+     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
+     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
+     453,   454,   455,   456,   457,   458,   459,   460,   461,   462,
+     463,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+      -1,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   353,   354,    -1,   356,    -1,   358,   359,    -1,    -1,
+      -1,    -1,   364,   365,   366,   367,   368,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   378,   379,   380,   381,
+     382,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
+     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
+      -1,   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,   458,   459,   460,   461,
+     462,   463,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,    -1,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   353,   354,    -1,   356,    -1,   358,   359,    -1,
+      -1,    -1,    -1,   364,   365,   366,   367,   368,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,   379,   380,
+     381,   382,    -1,    -1,    -1,   386,   387,   388,   389,   390,
+     391,   392,   393,   394,   395,   396,   397,   398,   399,   400,
+     401,    -1,   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,   458,   459,   460,
+     461,   462,   463,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,    -1,    -1,   334,   335,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   353,   354,    -1,   356,    -1,   358,    -1,
+      -1,    -1,    -1,    -1,   364,   365,   366,   367,   368,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,   379,
+     380,   381,   382,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,    -1,   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,   458,   459,
+     460,   461,   462,   463,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,    -1,    -1,   334,   335,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   353,   354,    -1,   356,    -1,   358,
+      -1,    -1,    -1,    -1,    -1,   364,   365,   366,   367,   368,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,
+     379,   380,   381,   382,    -1,    -1,    -1,   386,   387,   388,
+     389,   390,   391,   392,   393,   394,   395,   396,   397,   398,
+     399,   400,   401,    -1,   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,   458,
+     459,   460,   461,   462,   463,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,    -1,    -1,   334,   335,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   353,   354,    -1,   356,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   364,   365,   366,   367,
+     368,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     378,   379,   380,   381,   382,    -1,    -1,    -1,   386,   387,
+     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
+     398,   399,   400,   401,    -1,   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,
+     458,   459,   460,   461,   462,   463,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
+     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,    -1,    -1,   334,   335,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   353,   354,    -1,   356,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   364,   365,   366,
+     367,   368,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   378,   379,   380,   381,   382,    -1,    -1,    -1,   386,
+     387,   388,   389,   390,   391,   392,   393,   394,   395,   396,
+     397,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   413,   414,   415,   416,
+     417,   418,   419,   420,   421,   422,   423,   424,   425,   426,
+     427,   428,    -1,   430,   431,   432,   433,   434,   435,   436,
+     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
+     447,   448,   449,   450,   451,   452,   453,   454,   455,   456,
+     457,   458,   459,   460,   461,   462,   463,     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,    -1,    -1,    -1,   322,   323,   324,   325,
+     326,   327,   328,   329,   330,   331,    -1,    -1,   334,   335,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   353,   354,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,
+     366,   367,   368,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   378,   379,   380,   381,    -1,    -1,    -1,    -1,
+     386,   387,   388,   389,   390,   391,   392,   393,   394,   395,
+     396,   397,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   413,   414,   415,
+     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
+     426,   427,   428,    -1,   430,   431,   432,   433,   434,   435,
+     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
+     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
+     456,   457,   458,   459,   460,   461,   462,   463,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,   327,   328,   329,   330,   331,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   356,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   364,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   378,   379,   380,   381,   382,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   391,   392,   393,   394,
+     395,   396,   397,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   413,   414,
+     415,   416,   417,   418,   419,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   428,    -1,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,     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,    -1,    -1,    -1,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   378,   379,   380,   381,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   391,   392,   393,
+     394,   395,   396,   397,   398,    -1,    -1,   401,    -1,   403,
+     404,    -1,    -1,   407,    -1,    -1,    -1,    -1,    -1,   413,
+     414,   415,   416,   417,   418,   419,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   428,    -1,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+     454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
+       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,    -1,    -1,    -1,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   364,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   378,   379,   380,   381,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   390,   391,   392,
+     393,   394,   395,   396,   397,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     413,   414,   415,   416,   417,   418,   419,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   428,    -1,   430,   431,   432,
+     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
+     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
+     453,   454,   455,   456,   457,   458,   459,   460,   461,   462,
+     463,     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,    -1,    -1,    -1,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   356,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   378,   379,   380,   381,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   391,
+     392,   393,   394,   395,   396,   397,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   413,   414,   415,   416,   417,   418,   419,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   428,    -1,   430,   431,
+     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
+     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
+     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
+     462,   463,     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,    -1,    -1,
+      -1,   322,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,   379,   380,
+     381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     391,   392,   393,   394,   395,   396,   397,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   413,   414,   415,   416,   417,   418,   419,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   428,    -1,   430,
+     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
+     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
+     451,   452,   453,   454,   455,   456,   457,   458,   459,   460,
+     461,   462,   463,     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,    -1,
+      -1,    -1,   322,   323,   324,   325,   326,   327,   328,   329,
+     330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,   379,
+     380,   381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   391,   392,   393,   394,   395,   396,   397,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   413,   414,   415,   416,   417,   418,   419,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   428,    -1,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,     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,
+      -1,    -1,    -1,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   378,
+     379,   380,   381,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   391,   392,   393,   394,   395,   396,   397,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   413,   414,   415,   416,   417,   418,
+     419,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   428,
+      -1,   430,   431,   432,   433,   434,   435,   436,   437,   438,
+     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
+     449,   450,   451,   452,   453,   454,   455,   456,   457,   458,
+     459,   460,   461,   462,   463,     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,    -1,    -1,    -1,   322,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     378,   379,   380,   381,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   391,   392,   393,   394,   395,   396,   397,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   413,   414,   415,   416,   417,
+     418,   419,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     428,    -1,   430,   431,   432,   433,   434,   435,   436,   437,
+     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
+     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
+     458,   459,   460,   461,   462,   463,     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,    -1,
+     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,    -1,    -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,
+      -1,   329,   330,   331,    -1,    -1,   334,   335,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   353,   354,    -1,    -1,    -1,
+     358,   359,    -1,    -1,    -1,    -1,    -1,   365,   366,   367,
+     368,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
+     388,   389,   390,   391,    -1,    -1,    -1,    -1,   396,   397,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   420,   421,   422,   423,   424,   425,   426,   427,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   442,     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,    -1,   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,
+      -1,    -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    -1,
+     329,   330,   331,    -1,    -1,   334,   335,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   353,   354,    -1,    -1,    -1,   358,
+     359,    -1,    -1,    -1,    -1,    -1,   365,   366,   367,   368,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,
+     389,   390,   391,    -1,    -1,    -1,    -1,   396,   397,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   420,   421,   422,   423,   424,   425,   426,   427,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   442,     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,    -1,   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,    -1,
+      -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    -1,   329,
+     330,   331,    -1,    -1,   334,   335,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   353,   354,    -1,    -1,   357,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   365,   366,   367,   368,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,    -1,    -1,    -1,    -1,   396,   397,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     420,   421,   422,   423,   424,   425,   426,   427,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   442,     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,    -1,   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,    -1,    -1,
+      -1,    -1,    -1,    -1,   325,    -1,    -1,    -1,   329,   330,
+     331,    -1,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   353,   354,    -1,    -1,    -1,   358,    -1,    -1,
+      -1,    -1,    -1,    -1,   365,   366,   367,   368,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,
+     391,    -1,    -1,    -1,    -1,   396,   397,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   420,
+     421,   422,   423,   424,   425,   426,   427,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   442,     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,    -1,   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,    -1,    -1,    -1,
+      -1,    -1,    -1,   325,    -1,    -1,    -1,   329,   330,   331,
+      -1,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   353,   354,    -1,    -1,   357,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   365,   366,   367,   368,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
+      -1,    -1,    -1,    -1,   396,   397,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   420,   421,
+     422,   423,   424,   425,   426,   427,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     442,     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,    -1,   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,    -1,    -1,    -1,    -1,
+      -1,    -1,   325,    -1,    -1,    -1,   329,   330,   331,    -1,
+      -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     353,   354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   364,   365,   366,   367,   368,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   386,   387,   388,   389,   390,   391,    -1,
+      -1,    -1,    -1,   396,   397,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   420,   421,   422,
+     423,   424,   425,   426,   427,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
+       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,    -1,   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,    -1,    -1,    -1,    -1,    -1,
+      -1,   325,    -1,    -1,    -1,   329,   330,   331,    -1,    -1,
+     334,   335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   353,
+     354,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   365,   366,   367,   368,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   386,   387,   388,   389,   390,   391,    -1,    -1,
+      -1,    -1,   396,   397,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   420,   421,   422,   423,
+     424,   425,   426,   427,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,     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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,
+     325,    -1,    -1,    -1,   329,   330,   331,    -1,    -1,   334,
+     335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   353,   354,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     365,   366,   367,   368,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,    -1,    -1,    -1,
+      -1,   396,   397,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   420,   421,   422,   423,   424,
+     425,   426,   427,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,     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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   325,
+      -1,    -1,    -1,   329,   330,   331,    -1,    -1,   334,   335,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   353,   354,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,
+     366,   367,   368,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     386,   387,   388,   389,   390,   391,    -1,    -1,    -1,    -1,
+     396,   397,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   420,   421,   422,   423,   424,   425,
+     426,   427,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   442,     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,
+      -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   325,    -1,
+      -1,    -1,   329,   330,   331,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   391,    -1,    -1,    -1,    -1,   396,
+     397
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -4236,142 +4282,144 @@
      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,   351,   359,   373,   374,   375,
-     376,   377,   386,   387,   388,   389,   390,   391,   392,   408,
-     409,   410,   411,   412,   413,   422,   424,   425,   426,   427,
-     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
+     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
+     356,   364,   378,   379,   380,   381,   382,   391,   392,   393,
+     394,   395,   396,   397,   413,   414,   415,   416,   417,   418,
+     419,   428,   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,
-     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
+     458,   459,   460,   461,   462,   463,   495,   496,   499,   500,
+     501,   502,   506,   507,   508,   509,   510,   511,   514,   515,
+     516,   517,   518,   520,   525,   526,   527,   568,   569,   570,
+     572,   579,   583,   584,   590,   593,   354,   354,   354,   354,
+     354,   354,   354,   354,   356,   526,   358,   390,   354,   354,
+     364,   390,   364,   571,   355,   361,   503,   504,   505,   515,
+     520,   361,   364,   390,   364,   390,   516,   520,   372,   522,
+     523,     0,   569,   500,   508,   515,   364,   499,   390,   575,
+     576,   594,   595,   387,   390,   575,   387,   575,   387,   575,
+     387,   575,   387,   575,   575,   594,   387,   575,   390,   573,
+     574,   520,   529,   358,   390,   414,   512,   513,   390,   519,
+     356,   364,   521,   358,   547,   572,   504,   503,   505,   390,
+     390,   354,   363,   521,   358,   361,   364,   498,   334,   335,
+     353,   354,   365,   366,   367,   368,   386,   387,   388,   389,
+     390,   420,   421,   422,   423,   424,   425,   426,   427,   465,
+     466,   467,   469,   470,   471,   472,   473,   474,   475,   476,
+     477,   518,   520,   524,   521,   355,   390,   364,   363,   361,
+     355,   361,   355,   361,   363,   361,   361,   361,   355,   361,
+     361,   361,   361,   361,   361,   361,   355,   361,   355,   361,
+     354,   357,   361,   364,   515,   520,   530,   531,   528,   363,
+     355,   361,   355,   361,   357,   476,   478,   479,   480,   481,
+     482,   483,   484,   485,   486,   487,   488,   489,   356,   364,
+     358,   359,   364,   398,   399,   400,   401,   403,   404,   405,
+     406,   407,   408,   409,   410,   411,   412,   429,   476,   489,
+     491,   493,   495,   499,   518,   520,   536,   537,   538,   539,
+     540,   548,   549,   550,   551,   554,   555,   558,   559,   560,
+     567,   572,   521,   363,   521,   358,   491,   534,   363,   497,
+     390,   361,   364,   476,   476,   493,   334,   335,   356,   360,
+     355,   355,   361,   397,   491,   354,   476,   361,   373,   572,
+     353,   356,   387,   576,   594,   390,   595,   353,   386,   387,
+     388,   389,   580,   581,   387,   489,   494,   582,   387,   386,
+     387,   388,   389,   585,   586,   387,   386,   387,   388,   389,
+     465,   587,   588,   387,   353,   589,   387,   594,   390,   494,
+     525,   591,   592,   387,   494,   357,   574,   520,   390,   532,
+     533,   359,   531,   530,   494,   513,   390,   369,   370,   371,
+     366,   368,   332,   333,   336,   337,   372,   373,   338,   339,
+     376,   375,   374,   340,   342,   341,   377,   357,   357,   489,
+     359,   541,   354,   364,   364,   562,   354,   354,   364,   364,
+     493,   354,   493,   362,   364,   364,   364,   364,   343,   344,
+     345,   346,   347,   348,   349,   350,   351,   352,   363,   492,
+     361,   364,   359,   537,   551,   555,   560,   534,   363,   359,
+     534,   535,   534,   530,   390,   355,   468,   493,   390,   491,
+     476,   353,   387,   577,   578,   355,   363,   355,   361,   355,
+     361,   355,   361,   361,   355,   361,   355,   361,   355,   361,
+     361,   355,   361,   361,   355,   361,   355,   361,   355,   355,
+     532,   521,   361,   364,   359,   476,   476,   476,   478,   478,
+     479,   479,   480,   480,   480,   480,   481,   481,   482,   483,
+     484,   485,   486,   487,   490,   357,   548,   561,   537,   563,
+     493,   364,   493,   362,   491,   491,   534,   359,   361,   359,
+     357,   357,   361,   357,   361,   581,   580,   494,   582,   586,
+     585,   588,   587,   353,   589,   591,   592,   364,   533,   493,
+     542,   493,   508,   553,   398,   536,   549,   564,   355,   355,
+     359,   534,   353,   387,   355,   355,   355,   355,   355,   355,
+     362,   359,   390,   355,   354,   553,   565,   566,   544,   545,
+     546,   552,   556,   491,   363,   538,   543,   547,   493,   364,
+     355,   402,   540,   538,   358,   534,   355,   493,   543,   544,
+     548,   557,   364,   359
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
 {
-       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
+       0,   464,   465,   466,   466,   466,   466,   466,   466,   466,
+     466,   466,   466,   466,   466,   466,   466,   466,   467,   467,
+     467,   467,   467,   467,   468,   469,   470,   471,   471,   472,
+     472,   473,   473,   474,   475,   475,   475,   476,   476,   476,
+     476,   477,   477,   477,   477,   478,   478,   478,   478,   479,
+     479,   479,   480,   480,   480,   481,   481,   481,   481,   481,
+     482,   482,   482,   483,   483,   484,   484,   485,   485,   486,
+     486,   487,   487,   488,   488,   489,   490,   489,   491,   491,
+     492,   492,   492,   492,   492,   492,   492,   492,   492,   492,
+     492,   493,   493,   494,   495,   495,   495,   495,   495,   495,
+     495,   495,   495,   495,   495,   497,   496,   498,   498,   499,
+     499,   499,   499,   500,   500,   501,   501,   502,   503,   503,
+     504,   504,   504,   504,   505,   506,   506,   506,   506,   506,
+     507,   507,   507,   507,   507,   508,   508,   509,   510,   510,
+     510,   510,   510,   510,   510,   510,   510,   510,   511,   512,
+     512,   513,   513,   513,   514,   515,   515,   516,   516,   516,
+     516,   516,   516,   516,   516,   516,   516,   516,   517,   517,
+     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
+     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
+     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
+     517,   517,   517,   517,   517,   517,   518,   519,   519,   520,
+     520,   521,   521,   521,   521,   522,   522,   523,   524,   524,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   525,
+     525,   525,   525,   525,   525,   525,   525,   525,   525,   526,
+     526,   526,   528,   527,   529,   527,   530,   530,   531,   531,
+     532,   532,   533,   533,   534,   534,   534,   534,   535,   535,
+     536,   537,   537,   538,   538,   538,   538,   538,   538,   538,
+     538,   539,   540,   541,   542,   540,   543,   543,   545,   544,
+     546,   544,   547,   547,   548,   548,   549,   549,   550,   550,
+     551,   552,   552,   553,   553,   554,   554,   556,   555,   557,
+     557,   558,   558,   559,   559,   561,   560,   562,   560,   563,
+     560,   564,   564,   565,   565,   566,   566,   567,   567,   567,
+     567,   567,   567,   567,   567,   568,   568,   569,   569,   569,
+     571,   570,   572,   573,   573,   574,   574,   575,   575,   576,
+     576,   577,   577,   578,   578,   579,   579,   579,   579,   579,
+     579,   580,   580,   581,   581,   581,   581,   581,   582,   582,
+     583,   583,   584,   584,   584,   584,   584,   584,   584,   584,
+     585,   585,   586,   586,   586,   586,   587,   587,   588,   588,
+     588,   588,   588,   589,   589,   590,   590,   590,   590,   591,
+     591,   592,   592,   593,   593,   594,   594,   595,   595
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -4397,8 +4445,8 @@
        1,     1,     1,     1,     1,     1,     1,     1,     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,     1,     3,     2,     3,     2,
-       3,     3,     4,     1,     0,     3,     1,     3,     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,
@@ -4430,22 +4478,23 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     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,     1,     1,     1,     1,
+       1,     1,     0,     6,     0,     5,     1,     2,     3,     4,
+       1,     3,     1,     2,     1,     3,     4,     2,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     2,     2,     0,     0,     5,     1,     1,     0,     2,
+       0,     2,     2,     3,     1,     2,     1,     2,     1,     2,
+       5,     3,     1,     1,     4,     1,     2,     0,     8,     0,
+       1,     3,     2,     1,     2,     0,     6,     0,     8,     0,
+       7,     1,     1,     1,     0,     2,     3,     2,     2,     2,
+       3,     2,     2,     2,     2,     1,     2,     1,     1,     1,
+       0,     3,     5,     1,     3,     1,     4,     1,     3,     5,
+       5,     1,     3,     1,     3,     4,     6,     6,     8,     6,
+       8,     1,     3,     1,     1,     1,     1,     1,     1,     3,
+       4,     6,     4,     6,     6,     8,     6,     8,     6,     8,
+       1,     3,     1,     1,     1,     1,     1,     3,     1,     1,
+       1,     1,     1,     1,     3,     6,     8,     4,     6,     1,
+       3,     1,     1,     4,     6,     1,     3,     3,     3
 };
 
 
@@ -5191,260 +5240,260 @@
   switch (yyn)
     {
   case 2: /* variable_identifier: IDENTIFIER  */
-#line 392 "MachineIndependent/glslang.y"
+#line 394 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 5199 "MachineIndependent/glslang_tab.cpp"
+#line 5248 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 3: /* primary_expression: variable_identifier  */
-#line 398 "MachineIndependent/glslang.y"
+#line 400 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5207 "MachineIndependent/glslang_tab.cpp"
+#line 5256 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
-#line 401 "MachineIndependent/glslang.y"
+#line 403 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 5217 "MachineIndependent/glslang_tab.cpp"
+#line 5266 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 5: /* primary_expression: FLOATCONSTANT  */
-#line 406 "MachineIndependent/glslang.y"
+#line 408 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 5225 "MachineIndependent/glslang_tab.cpp"
+#line 5274 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 6: /* primary_expression: INTCONSTANT  */
-#line 409 "MachineIndependent/glslang.y"
+#line 411 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5233 "MachineIndependent/glslang_tab.cpp"
+#line 5282 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 7: /* primary_expression: UINTCONSTANT  */
-#line 412 "MachineIndependent/glslang.y"
+#line 414 "MachineIndependent/glslang.y"
                    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5242 "MachineIndependent/glslang_tab.cpp"
+#line 5291 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 8: /* primary_expression: BOOLCONSTANT  */
-#line 416 "MachineIndependent/glslang.y"
+#line 418 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 5250 "MachineIndependent/glslang_tab.cpp"
+#line 5299 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 9: /* primary_expression: STRING_LITERAL  */
-#line 420 "MachineIndependent/glslang.y"
+#line 422 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 5258 "MachineIndependent/glslang_tab.cpp"
+#line 5307 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 10: /* primary_expression: INT32CONSTANT  */
-#line 423 "MachineIndependent/glslang.y"
+#line 425 "MachineIndependent/glslang.y"
                     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5267 "MachineIndependent/glslang_tab.cpp"
+#line 5316 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 11: /* primary_expression: UINT32CONSTANT  */
-#line 427 "MachineIndependent/glslang.y"
+#line 429 "MachineIndependent/glslang.y"
                      {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5276 "MachineIndependent/glslang_tab.cpp"
+#line 5325 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 12: /* primary_expression: INT64CONSTANT  */
-#line 431 "MachineIndependent/glslang.y"
+#line 433 "MachineIndependent/glslang.y"
                     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 5285 "MachineIndependent/glslang_tab.cpp"
+#line 5334 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 13: /* primary_expression: UINT64CONSTANT  */
-#line 435 "MachineIndependent/glslang.y"
+#line 437 "MachineIndependent/glslang.y"
                      {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 5294 "MachineIndependent/glslang_tab.cpp"
+#line 5343 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 14: /* primary_expression: INT16CONSTANT  */
-#line 439 "MachineIndependent/glslang.y"
+#line 441 "MachineIndependent/glslang.y"
                     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5303 "MachineIndependent/glslang_tab.cpp"
+#line 5352 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 15: /* primary_expression: UINT16CONSTANT  */
-#line 443 "MachineIndependent/glslang.y"
+#line 445 "MachineIndependent/glslang.y"
                      {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5312 "MachineIndependent/glslang_tab.cpp"
+#line 5361 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 16: /* primary_expression: DOUBLECONSTANT  */
-#line 447 "MachineIndependent/glslang.y"
+#line 449 "MachineIndependent/glslang.y"
                      {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
         if (! parseContext.symbolTable.atBuiltInLevel())
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 5323 "MachineIndependent/glslang_tab.cpp"
+#line 5372 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 17: /* primary_expression: FLOAT16CONSTANT  */
-#line 453 "MachineIndependent/glslang.y"
+#line 455 "MachineIndependent/glslang.y"
                       {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 5332 "MachineIndependent/glslang_tab.cpp"
+#line 5381 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 18: /* postfix_expression: primary_expression  */
-#line 461 "MachineIndependent/glslang.y"
+#line 463 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5340 "MachineIndependent/glslang_tab.cpp"
+#line 5389 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
-#line 464 "MachineIndependent/glslang.y"
+#line 466 "MachineIndependent/glslang.y"
                                                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5348 "MachineIndependent/glslang_tab.cpp"
+#line 5397 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 20: /* postfix_expression: function_call  */
-#line 467 "MachineIndependent/glslang.y"
+#line 469 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5356 "MachineIndependent/glslang_tab.cpp"
+#line 5405 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
-#line 470 "MachineIndependent/glslang.y"
+#line 472 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 5364 "MachineIndependent/glslang_tab.cpp"
+#line 5413 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 22: /* postfix_expression: postfix_expression INC_OP  */
-#line 473 "MachineIndependent/glslang.y"
+#line 475 "MachineIndependent/glslang.y"
                                 {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5374 "MachineIndependent/glslang_tab.cpp"
+#line 5423 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 23: /* postfix_expression: postfix_expression DEC_OP  */
-#line 478 "MachineIndependent/glslang.y"
+#line 480 "MachineIndependent/glslang.y"
                                 {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5384 "MachineIndependent/glslang_tab.cpp"
+#line 5433 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 24: /* integer_expression: expression  */
-#line 486 "MachineIndependent/glslang.y"
+#line 488 "MachineIndependent/glslang.y"
                  {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5393 "MachineIndependent/glslang_tab.cpp"
+#line 5442 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 25: /* function_call: function_call_or_method  */
-#line 493 "MachineIndependent/glslang.y"
+#line 495 "MachineIndependent/glslang.y"
                               {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 5402 "MachineIndependent/glslang_tab.cpp"
+#line 5451 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 26: /* function_call_or_method: function_call_generic  */
-#line 500 "MachineIndependent/glslang.y"
+#line 502 "MachineIndependent/glslang.y"
                             {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5410 "MachineIndependent/glslang_tab.cpp"
+#line 5459 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
-#line 506 "MachineIndependent/glslang.y"
+#line 508 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5419 "MachineIndependent/glslang_tab.cpp"
+#line 5468 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
-#line 510 "MachineIndependent/glslang.y"
+#line 512 "MachineIndependent/glslang.y"
                                                      {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5428 "MachineIndependent/glslang_tab.cpp"
+#line 5477 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 29: /* function_call_header_no_parameters: function_call_header VOID  */
-#line 517 "MachineIndependent/glslang.y"
+#line 519 "MachineIndependent/glslang.y"
                                 {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5436 "MachineIndependent/glslang_tab.cpp"
+#line 5485 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 30: /* function_call_header_no_parameters: function_call_header  */
-#line 520 "MachineIndependent/glslang.y"
+#line 522 "MachineIndependent/glslang.y"
                            {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5444 "MachineIndependent/glslang_tab.cpp"
+#line 5493 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 31: /* function_call_header_with_parameters: function_call_header assignment_expression  */
-#line 526 "MachineIndependent/glslang.y"
+#line 528 "MachineIndependent/glslang.y"
                                                  {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -5452,11 +5501,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5456 "MachineIndependent/glslang_tab.cpp"
+#line 5505 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
-#line 533 "MachineIndependent/glslang.y"
+#line 535 "MachineIndependent/glslang.y"
                                                                        {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -5464,29 +5513,29 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 5468 "MachineIndependent/glslang_tab.cpp"
+#line 5517 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 33: /* function_call_header: function_identifier LEFT_PAREN  */
-#line 543 "MachineIndependent/glslang.y"
+#line 545 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5476 "MachineIndependent/glslang_tab.cpp"
+#line 5525 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 34: /* function_identifier: type_specifier  */
-#line 551 "MachineIndependent/glslang.y"
+#line 553 "MachineIndependent/glslang.y"
                      {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5486 "MachineIndependent/glslang_tab.cpp"
+#line 5535 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 35: /* function_identifier: postfix_expression  */
-#line 556 "MachineIndependent/glslang.y"
+#line 558 "MachineIndependent/glslang.y"
                          {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -5514,50 +5563,50 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 5518 "MachineIndependent/glslang_tab.cpp"
+#line 5567 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 36: /* function_identifier: non_uniform_qualifier  */
-#line 584 "MachineIndependent/glslang.y"
+#line 586 "MachineIndependent/glslang.y"
                             {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5528 "MachineIndependent/glslang_tab.cpp"
+#line 5577 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 37: /* unary_expression: postfix_expression  */
-#line 593 "MachineIndependent/glslang.y"
+#line 595 "MachineIndependent/glslang.y"
                          {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 5539 "MachineIndependent/glslang_tab.cpp"
+#line 5588 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 38: /* unary_expression: INC_OP unary_expression  */
-#line 599 "MachineIndependent/glslang.y"
+#line 601 "MachineIndependent/glslang.y"
                               {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5548 "MachineIndependent/glslang_tab.cpp"
+#line 5597 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 39: /* unary_expression: DEC_OP unary_expression  */
-#line 603 "MachineIndependent/glslang.y"
+#line 605 "MachineIndependent/glslang.y"
                               {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5557 "MachineIndependent/glslang_tab.cpp"
+#line 5606 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 40: /* unary_expression: unary_operator unary_expression  */
-#line 607 "MachineIndependent/glslang.y"
+#line 609 "MachineIndependent/glslang.y"
                                       {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -5574,179 +5623,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 5578 "MachineIndependent/glslang_tab.cpp"
+#line 5627 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 41: /* unary_operator: PLUS  */
-#line 627 "MachineIndependent/glslang.y"
+#line 629 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 5584 "MachineIndependent/glslang_tab.cpp"
+#line 5633 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 42: /* unary_operator: DASH  */
-#line 628 "MachineIndependent/glslang.y"
+#line 630 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 5590 "MachineIndependent/glslang_tab.cpp"
+#line 5639 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 43: /* unary_operator: BANG  */
-#line 629 "MachineIndependent/glslang.y"
+#line 631 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 5596 "MachineIndependent/glslang_tab.cpp"
+#line 5645 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 44: /* unary_operator: TILDE  */
-#line 630 "MachineIndependent/glslang.y"
+#line 632 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 5603 "MachineIndependent/glslang_tab.cpp"
+#line 5652 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 45: /* multiplicative_expression: unary_expression  */
-#line 636 "MachineIndependent/glslang.y"
+#line 638 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5609 "MachineIndependent/glslang_tab.cpp"
+#line 5658 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
-#line 637 "MachineIndependent/glslang.y"
+#line 639 "MachineIndependent/glslang.y"
                                                       {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5619 "MachineIndependent/glslang_tab.cpp"
+#line 5668 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
-#line 642 "MachineIndependent/glslang.y"
+#line 644 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5629 "MachineIndependent/glslang_tab.cpp"
+#line 5678 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
-#line 647 "MachineIndependent/glslang.y"
+#line 649 "MachineIndependent/glslang.y"
                                                          {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5640 "MachineIndependent/glslang_tab.cpp"
+#line 5689 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 49: /* additive_expression: multiplicative_expression  */
-#line 656 "MachineIndependent/glslang.y"
+#line 658 "MachineIndependent/glslang.y"
                                 { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5646 "MachineIndependent/glslang_tab.cpp"
+#line 5695 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 50: /* additive_expression: additive_expression PLUS multiplicative_expression  */
-#line 657 "MachineIndependent/glslang.y"
+#line 659 "MachineIndependent/glslang.y"
                                                          {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5656 "MachineIndependent/glslang_tab.cpp"
+#line 5705 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 51: /* additive_expression: additive_expression DASH multiplicative_expression  */
-#line 662 "MachineIndependent/glslang.y"
+#line 664 "MachineIndependent/glslang.y"
                                                          {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5666 "MachineIndependent/glslang_tab.cpp"
+#line 5715 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 52: /* shift_expression: additive_expression  */
-#line 670 "MachineIndependent/glslang.y"
+#line 672 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5672 "MachineIndependent/glslang_tab.cpp"
+#line 5721 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 53: /* shift_expression: shift_expression LEFT_OP additive_expression  */
-#line 671 "MachineIndependent/glslang.y"
+#line 673 "MachineIndependent/glslang.y"
                                                    {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5683 "MachineIndependent/glslang_tab.cpp"
+#line 5732 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
-#line 677 "MachineIndependent/glslang.y"
+#line 679 "MachineIndependent/glslang.y"
                                                     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5694 "MachineIndependent/glslang_tab.cpp"
+#line 5743 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 55: /* relational_expression: shift_expression  */
-#line 686 "MachineIndependent/glslang.y"
+#line 688 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5700 "MachineIndependent/glslang_tab.cpp"
+#line 5749 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
-#line 687 "MachineIndependent/glslang.y"
+#line 689 "MachineIndependent/glslang.y"
                                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5710 "MachineIndependent/glslang_tab.cpp"
+#line 5759 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
-#line 692 "MachineIndependent/glslang.y"
+#line 694 "MachineIndependent/glslang.y"
                                                           {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5720 "MachineIndependent/glslang_tab.cpp"
+#line 5769 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 58: /* relational_expression: relational_expression LE_OP shift_expression  */
-#line 697 "MachineIndependent/glslang.y"
+#line 699 "MachineIndependent/glslang.y"
                                                     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5730 "MachineIndependent/glslang_tab.cpp"
+#line 5779 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 59: /* relational_expression: relational_expression GE_OP shift_expression  */
-#line 702 "MachineIndependent/glslang.y"
+#line 704 "MachineIndependent/glslang.y"
                                                     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5740 "MachineIndependent/glslang_tab.cpp"
+#line 5789 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 60: /* equality_expression: relational_expression  */
-#line 710 "MachineIndependent/glslang.y"
+#line 712 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5746 "MachineIndependent/glslang_tab.cpp"
+#line 5795 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 61: /* equality_expression: equality_expression EQ_OP relational_expression  */
-#line 711 "MachineIndependent/glslang.y"
+#line 713 "MachineIndependent/glslang.y"
                                                        {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -5756,11 +5805,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5760 "MachineIndependent/glslang_tab.cpp"
+#line 5809 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 62: /* equality_expression: equality_expression NE_OP relational_expression  */
-#line 720 "MachineIndependent/glslang.y"
+#line 722 "MachineIndependent/glslang.y"
                                                       {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -5770,124 +5819,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5774 "MachineIndependent/glslang_tab.cpp"
+#line 5823 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 63: /* and_expression: equality_expression  */
-#line 732 "MachineIndependent/glslang.y"
+#line 734 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5780 "MachineIndependent/glslang_tab.cpp"
+#line 5829 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 64: /* and_expression: and_expression AMPERSAND equality_expression  */
-#line 733 "MachineIndependent/glslang.y"
+#line 735 "MachineIndependent/glslang.y"
                                                    {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5791 "MachineIndependent/glslang_tab.cpp"
+#line 5840 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 65: /* exclusive_or_expression: and_expression  */
-#line 742 "MachineIndependent/glslang.y"
+#line 744 "MachineIndependent/glslang.y"
                      { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5797 "MachineIndependent/glslang_tab.cpp"
+#line 5846 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
-#line 743 "MachineIndependent/glslang.y"
+#line 745 "MachineIndependent/glslang.y"
                                                    {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5808 "MachineIndependent/glslang_tab.cpp"
+#line 5857 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 67: /* inclusive_or_expression: exclusive_or_expression  */
-#line 752 "MachineIndependent/glslang.y"
+#line 754 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5814 "MachineIndependent/glslang_tab.cpp"
+#line 5863 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
-#line 753 "MachineIndependent/glslang.y"
+#line 755 "MachineIndependent/glslang.y"
                                                                    {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5825 "MachineIndependent/glslang_tab.cpp"
+#line 5874 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 69: /* logical_and_expression: inclusive_or_expression  */
-#line 762 "MachineIndependent/glslang.y"
+#line 764 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5831 "MachineIndependent/glslang_tab.cpp"
+#line 5880 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
-#line 763 "MachineIndependent/glslang.y"
+#line 765 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5841 "MachineIndependent/glslang_tab.cpp"
+#line 5890 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 71: /* logical_xor_expression: logical_and_expression  */
-#line 771 "MachineIndependent/glslang.y"
+#line 773 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5847 "MachineIndependent/glslang_tab.cpp"
+#line 5896 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
-#line 772 "MachineIndependent/glslang.y"
+#line 774 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5857 "MachineIndependent/glslang_tab.cpp"
+#line 5906 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 73: /* logical_or_expression: logical_xor_expression  */
-#line 780 "MachineIndependent/glslang.y"
+#line 782 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5863 "MachineIndependent/glslang_tab.cpp"
+#line 5912 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
-#line 781 "MachineIndependent/glslang.y"
+#line 783 "MachineIndependent/glslang.y"
                                                           {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5873 "MachineIndependent/glslang_tab.cpp"
+#line 5922 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 75: /* conditional_expression: logical_or_expression  */
-#line 789 "MachineIndependent/glslang.y"
+#line 791 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5879 "MachineIndependent/glslang_tab.cpp"
+#line 5928 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 76: /* $@1: %empty  */
-#line 790 "MachineIndependent/glslang.y"
+#line 792 "MachineIndependent/glslang.y"
                                      {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 5887 "MachineIndependent/glslang_tab.cpp"
+#line 5936 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
-#line 793 "MachineIndependent/glslang.y"
+#line 795 "MachineIndependent/glslang.y"
                                              {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -5900,17 +5949,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5904 "MachineIndependent/glslang_tab.cpp"
+#line 5953 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 78: /* assignment_expression: conditional_expression  */
-#line 808 "MachineIndependent/glslang.y"
+#line 810 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5910 "MachineIndependent/glslang_tab.cpp"
+#line 5959 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
-#line 809 "MachineIndependent/glslang.y"
+#line 811 "MachineIndependent/glslang.y"
                                                                  {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -5924,119 +5973,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 5928 "MachineIndependent/glslang_tab.cpp"
+#line 5977 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 80: /* assignment_operator: EQUAL  */
-#line 825 "MachineIndependent/glslang.y"
+#line 827 "MachineIndependent/glslang.y"
             {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 5937 "MachineIndependent/glslang_tab.cpp"
+#line 5986 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 81: /* assignment_operator: MUL_ASSIGN  */
-#line 829 "MachineIndependent/glslang.y"
+#line 831 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 5946 "MachineIndependent/glslang_tab.cpp"
+#line 5995 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 82: /* assignment_operator: DIV_ASSIGN  */
-#line 833 "MachineIndependent/glslang.y"
+#line 835 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 5955 "MachineIndependent/glslang_tab.cpp"
+#line 6004 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 83: /* assignment_operator: MOD_ASSIGN  */
-#line 837 "MachineIndependent/glslang.y"
+#line 839 "MachineIndependent/glslang.y"
                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 5965 "MachineIndependent/glslang_tab.cpp"
+#line 6014 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 84: /* assignment_operator: ADD_ASSIGN  */
-#line 842 "MachineIndependent/glslang.y"
+#line 844 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5974 "MachineIndependent/glslang_tab.cpp"
+#line 6023 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 85: /* assignment_operator: SUB_ASSIGN  */
-#line 846 "MachineIndependent/glslang.y"
+#line 848 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 5983 "MachineIndependent/glslang_tab.cpp"
+#line 6032 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 86: /* assignment_operator: LEFT_ASSIGN  */
-#line 850 "MachineIndependent/glslang.y"
+#line 852 "MachineIndependent/glslang.y"
                   {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 5992 "MachineIndependent/glslang_tab.cpp"
+#line 6041 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 87: /* assignment_operator: RIGHT_ASSIGN  */
-#line 854 "MachineIndependent/glslang.y"
+#line 856 "MachineIndependent/glslang.y"
                    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 6001 "MachineIndependent/glslang_tab.cpp"
+#line 6050 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 88: /* assignment_operator: AND_ASSIGN  */
-#line 858 "MachineIndependent/glslang.y"
+#line 860 "MachineIndependent/glslang.y"
                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 6010 "MachineIndependent/glslang_tab.cpp"
+#line 6059 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 89: /* assignment_operator: XOR_ASSIGN  */
-#line 862 "MachineIndependent/glslang.y"
+#line 864 "MachineIndependent/glslang.y"
                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 6019 "MachineIndependent/glslang_tab.cpp"
+#line 6068 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 90: /* assignment_operator: OR_ASSIGN  */
-#line 866 "MachineIndependent/glslang.y"
+#line 868 "MachineIndependent/glslang.y"
                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 6028 "MachineIndependent/glslang_tab.cpp"
+#line 6077 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 91: /* expression: assignment_expression  */
-#line 873 "MachineIndependent/glslang.y"
+#line 875 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6036 "MachineIndependent/glslang_tab.cpp"
+#line 6085 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 92: /* expression: expression COMMA assignment_expression  */
-#line 876 "MachineIndependent/glslang.y"
+#line 878 "MachineIndependent/glslang.y"
                                              {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -6045,30 +6094,30 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 6049 "MachineIndependent/glslang_tab.cpp"
+#line 6098 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 93: /* constant_expression: conditional_expression  */
-#line 887 "MachineIndependent/glslang.y"
+#line 889 "MachineIndependent/glslang.y"
                              {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6058 "MachineIndependent/glslang_tab.cpp"
+#line 6107 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 94: /* declaration: function_prototype SEMICOLON  */
-#line 894 "MachineIndependent/glslang.y"
+#line 896 "MachineIndependent/glslang.y"
                                    {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6068 "MachineIndependent/glslang_tab.cpp"
+#line 6117 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON  */
-#line 900 "MachineIndependent/glslang.y"
+#line 902 "MachineIndependent/glslang.y"
                                                                {
         parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier");
         (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier
@@ -6076,31 +6125,31 @@
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6080 "MachineIndependent/glslang_tab.cpp"
+#line 6129 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON  */
-#line 907 "MachineIndependent/glslang.y"
+#line 909 "MachineIndependent/glslang.y"
                                                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier");
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier");
         (yyval.interm.intermNode) = 0;
     }
-#line 6090 "MachineIndependent/glslang_tab.cpp"
+#line 6139 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 97: /* declaration: init_declarator_list SEMICOLON  */
-#line 913 "MachineIndependent/glslang.y"
+#line 915 "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 6100 "MachineIndependent/glslang_tab.cpp"
+#line 6149 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
-#line 918 "MachineIndependent/glslang.y"
+#line 920 "MachineIndependent/glslang.y"
                                                              {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
         // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
@@ -6108,75 +6157,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 6112 "MachineIndependent/glslang_tab.cpp"
+#line 6161 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 99: /* declaration: block_structure SEMICOLON  */
-#line 925 "MachineIndependent/glslang.y"
+#line 927 "MachineIndependent/glslang.y"
                                 {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 6121 "MachineIndependent/glslang_tab.cpp"
+#line 6170 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 100: /* declaration: block_structure IDENTIFIER SEMICOLON  */
-#line 929 "MachineIndependent/glslang.y"
+#line 931 "MachineIndependent/glslang.y"
                                            {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6130 "MachineIndependent/glslang_tab.cpp"
+#line 6179 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
-#line 933 "MachineIndependent/glslang.y"
+#line 935 "MachineIndependent/glslang.y"
                                                            {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 6139 "MachineIndependent/glslang_tab.cpp"
+#line 6188 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 102: /* declaration: type_qualifier SEMICOLON  */
-#line 937 "MachineIndependent/glslang.y"
+#line 939 "MachineIndependent/glslang.y"
                                {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 6149 "MachineIndependent/glslang_tab.cpp"
+#line 6198 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON  */
-#line 942 "MachineIndependent/glslang.y"
+#line 944 "MachineIndependent/glslang.y"
                                           {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6159 "MachineIndependent/glslang_tab.cpp"
+#line 6208 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON  */
-#line 947 "MachineIndependent/glslang.y"
+#line 949 "MachineIndependent/glslang.y"
                                                           {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 6170 "MachineIndependent/glslang_tab.cpp"
+#line 6219 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 105: /* $@2: %empty  */
-#line 956 "MachineIndependent/glslang.y"
+#line 958 "MachineIndependent/glslang.y"
                                            { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 6176 "MachineIndependent/glslang_tab.cpp"
+#line 6225 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
-#line 956 "MachineIndependent/glslang.y"
+#line 958 "MachineIndependent/glslang.y"
                                                                                                                           {
         --parseContext.blockNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -6186,60 +6235,60 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 6190 "MachineIndependent/glslang_tab.cpp"
+#line 6239 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 107: /* identifier_list: COMMA IDENTIFIER  */
-#line 967 "MachineIndependent/glslang.y"
+#line 969 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6199 "MachineIndependent/glslang_tab.cpp"
+#line 6248 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 108: /* identifier_list: identifier_list COMMA IDENTIFIER  */
-#line 971 "MachineIndependent/glslang.y"
+#line 973 "MachineIndependent/glslang.y"
                                        {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6208 "MachineIndependent/glslang_tab.cpp"
+#line 6257 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 109: /* function_prototype: function_declarator RIGHT_PAREN  */
-#line 978 "MachineIndependent/glslang.y"
+#line 980 "MachineIndependent/glslang.y"
                                        {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 6217 "MachineIndependent/glslang_tab.cpp"
+#line 6266 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute  */
-#line 982 "MachineIndependent/glslang.y"
+#line 984 "MachineIndependent/glslang.y"
                                                 {
         (yyval.interm).function = (yyvsp[-2].interm.function);
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         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 6228 "MachineIndependent/glslang_tab.cpp"
+#line 6277 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN  */
-#line 988 "MachineIndependent/glslang.y"
+#line 990 "MachineIndependent/glslang.y"
                                                 {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         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 6239 "MachineIndependent/glslang_tab.cpp"
+#line 6288 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute  */
-#line 994 "MachineIndependent/glslang.y"
+#line 996 "MachineIndependent/glslang.y"
                                                           {
         (yyval.interm).function = (yyvsp[-2].interm.function);
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
@@ -6247,27 +6296,27 @@
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes));
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6251 "MachineIndependent/glslang_tab.cpp"
+#line 6300 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 113: /* function_declarator: function_header  */
-#line 1004 "MachineIndependent/glslang.y"
+#line 1006 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6259 "MachineIndependent/glslang_tab.cpp"
+#line 6308 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 114: /* function_declarator: function_header_with_parameters  */
-#line 1007 "MachineIndependent/glslang.y"
+#line 1009 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6267 "MachineIndependent/glslang_tab.cpp"
+#line 6316 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 115: /* function_header_with_parameters: function_header parameter_declaration  */
-#line 1014 "MachineIndependent/glslang.y"
+#line 1016 "MachineIndependent/glslang.y"
                                             {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -6276,11 +6325,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 6280 "MachineIndependent/glslang_tab.cpp"
+#line 6329 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
-#line 1022 "MachineIndependent/glslang.y"
+#line 1024 "MachineIndependent/glslang.y"
                                                                   {
         //
         // Only first parameter of one-parameter functions can be void
@@ -6298,11 +6347,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 6302 "MachineIndependent/glslang_tab.cpp"
+#line 6351 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
-#line 1042 "MachineIndependent/glslang.y"
+#line 1044 "MachineIndependent/glslang.y"
                                                  {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -6322,11 +6371,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 6326 "MachineIndependent/glslang_tab.cpp"
+#line 6375 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 118: /* parameter_declarator: type_specifier IDENTIFIER  */
-#line 1065 "MachineIndependent/glslang.y"
+#line 1067 "MachineIndependent/glslang.y"
                                 {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -6342,11 +6391,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6346 "MachineIndependent/glslang_tab.cpp"
+#line 6395 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
-#line 1080 "MachineIndependent/glslang.y"
+#line 1082 "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");
@@ -6366,11 +6415,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6370 "MachineIndependent/glslang_tab.cpp"
+#line 6419 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 120: /* parameter_declaration: type_qualifier parameter_declarator  */
-#line 1105 "MachineIndependent/glslang.y"
+#line 1107 "MachineIndependent/glslang.y"
                                           {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -6382,11 +6431,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 6386 "MachineIndependent/glslang_tab.cpp"
+#line 6435 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 121: /* parameter_declaration: parameter_declarator  */
-#line 1116 "MachineIndependent/glslang.y"
+#line 1118 "MachineIndependent/glslang.y"
                            {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -6394,11 +6443,11 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 6398 "MachineIndependent/glslang_tab.cpp"
+#line 6447 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 122: /* parameter_declaration: type_qualifier parameter_type_specifier  */
-#line 1126 "MachineIndependent/glslang.y"
+#line 1128 "MachineIndependent/glslang.y"
                                               {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -6409,11 +6458,11 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 6413 "MachineIndependent/glslang_tab.cpp"
+#line 6462 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 123: /* parameter_declaration: parameter_type_specifier  */
-#line 1136 "MachineIndependent/glslang.y"
+#line 1138 "MachineIndependent/glslang.y"
                                {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -6421,68 +6470,68 @@
         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 6425 "MachineIndependent/glslang_tab.cpp"
+#line 6474 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 124: /* parameter_type_specifier: type_specifier  */
-#line 1146 "MachineIndependent/glslang.y"
+#line 1148 "MachineIndependent/glslang.y"
                      {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 6436 "MachineIndependent/glslang_tab.cpp"
+#line 6485 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 125: /* init_declarator_list: single_declaration  */
-#line 1155 "MachineIndependent/glslang.y"
+#line 1157 "MachineIndependent/glslang.y"
                          {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 6444 "MachineIndependent/glslang_tab.cpp"
+#line 6493 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
-#line 1158 "MachineIndependent/glslang.y"
+#line 1160 "MachineIndependent/glslang.y"
                                             {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 6453 "MachineIndependent/glslang_tab.cpp"
+#line 6502 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
-#line 1162 "MachineIndependent/glslang.y"
+#line 1164 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 6462 "MachineIndependent/glslang_tab.cpp"
+#line 6511 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
-#line 1166 "MachineIndependent/glslang.y"
+#line 1168 "MachineIndependent/glslang.y"
                                                                               {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6472 "MachineIndependent/glslang_tab.cpp"
+#line 6521 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
-#line 1171 "MachineIndependent/glslang.y"
+#line 1173 "MachineIndependent/glslang.y"
                                                               {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6482 "MachineIndependent/glslang_tab.cpp"
+#line 6531 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 130: /* single_declaration: fully_specified_type  */
-#line 1179 "MachineIndependent/glslang.y"
+#line 1181 "MachineIndependent/glslang.y"
                            {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
@@ -6490,51 +6539,51 @@
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 6494 "MachineIndependent/glslang_tab.cpp"
+#line 6543 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 131: /* single_declaration: fully_specified_type IDENTIFIER  */
-#line 1186 "MachineIndependent/glslang.y"
+#line 1188 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 6504 "MachineIndependent/glslang_tab.cpp"
+#line 6553 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
-#line 1191 "MachineIndependent/glslang.y"
+#line 1193 "MachineIndependent/glslang.y"
                                                       {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 6514 "MachineIndependent/glslang_tab.cpp"
+#line 6563 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
-#line 1196 "MachineIndependent/glslang.y"
+#line 1198 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6524 "MachineIndependent/glslang_tab.cpp"
+#line 6573 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
-#line 1201 "MachineIndependent/glslang.y"
+#line 1203 "MachineIndependent/glslang.y"
                                                         {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6534 "MachineIndependent/glslang_tab.cpp"
+#line 6583 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 135: /* fully_specified_type: type_specifier  */
-#line 1210 "MachineIndependent/glslang.y"
+#line 1212 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -6545,13 +6594,13 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 6549 "MachineIndependent/glslang_tab.cpp"
+#line 6598 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 136: /* fully_specified_type: type_qualifier type_specifier  */
-#line 1220 "MachineIndependent/glslang.y"
+#line 1222 "MachineIndependent/glslang.y"
                                      {
-        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
+        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, false, &(yyvsp[0].interm.type));
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
 
         if ((yyvsp[0].interm.type).arraySizes) {
@@ -6574,22 +6623,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6578 "MachineIndependent/glslang_tab.cpp"
+#line 6627 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 137: /* invariant_qualifier: INVARIANT  */
-#line 1247 "MachineIndependent/glslang.y"
+#line 1249 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 6589 "MachineIndependent/glslang_tab.cpp"
+#line 6638 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 138: /* interpolation_qualifier: SMOOTH  */
-#line 1256 "MachineIndependent/glslang.y"
+#line 1258 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -6597,11 +6646,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6601 "MachineIndependent/glslang_tab.cpp"
+#line 6650 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 139: /* interpolation_qualifier: FLAT  */
-#line 1263 "MachineIndependent/glslang.y"
+#line 1265 "MachineIndependent/glslang.y"
            {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -6609,11 +6658,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 6613 "MachineIndependent/glslang_tab.cpp"
+#line 6662 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 140: /* interpolation_qualifier: NOPERSPECTIVE  */
-#line 1271 "MachineIndependent/glslang.y"
+#line 1273 "MachineIndependent/glslang.y"
                     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
@@ -6621,11 +6670,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 6625 "MachineIndependent/glslang_tab.cpp"
+#line 6674 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 141: /* interpolation_qualifier: EXPLICITINTERPAMD  */
-#line 1278 "MachineIndependent/glslang.y"
+#line 1280 "MachineIndependent/glslang.y"
                         {
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -6633,11 +6682,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 6637 "MachineIndependent/glslang_tab.cpp"
+#line 6686 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 142: /* interpolation_qualifier: PERVERTEXNV  */
-#line 1285 "MachineIndependent/glslang.y"
+#line 1287 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
@@ -6646,11 +6695,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 6650 "MachineIndependent/glslang_tab.cpp"
+#line 6699 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 143: /* interpolation_qualifier: PERVERTEXEXT  */
-#line 1293 "MachineIndependent/glslang.y"
+#line 1295 "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");
@@ -6659,11 +6708,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexEXT = true;
     }
-#line 6663 "MachineIndependent/glslang_tab.cpp"
+#line 6712 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 144: /* interpolation_qualifier: PERPRIMITIVENV  */
-#line 1301 "MachineIndependent/glslang.y"
+#line 1303 "MachineIndependent/glslang.y"
                      {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
@@ -6674,11 +6723,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 6678 "MachineIndependent/glslang_tab.cpp"
+#line 6727 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 145: /* interpolation_qualifier: PERPRIMITIVEEXT  */
-#line 1311 "MachineIndependent/glslang.y"
+#line 1313 "MachineIndependent/glslang.y"
                       {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT");
@@ -6689,11 +6738,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 6693 "MachineIndependent/glslang_tab.cpp"
+#line 6742 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 146: /* interpolation_qualifier: PERVIEWNV  */
-#line 1321 "MachineIndependent/glslang.y"
+#line 1323 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
@@ -6701,11 +6750,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 6705 "MachineIndependent/glslang_tab.cpp"
+#line 6754 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 147: /* interpolation_qualifier: PERTASKNV  */
-#line 1328 "MachineIndependent/glslang.y"
+#line 1330 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
@@ -6713,84 +6762,84 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 6717 "MachineIndependent/glslang_tab.cpp"
+#line 6766 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 148: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
-#line 1339 "MachineIndependent/glslang.y"
+#line 1341 "MachineIndependent/glslang.y"
                                                              {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 6725 "MachineIndependent/glslang_tab.cpp"
+#line 6774 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 149: /* layout_qualifier_id_list: layout_qualifier_id  */
-#line 1345 "MachineIndependent/glslang.y"
+#line 1347 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6733 "MachineIndependent/glslang_tab.cpp"
+#line 6782 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 150: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
-#line 1348 "MachineIndependent/glslang.y"
+#line 1350 "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 6743 "MachineIndependent/glslang_tab.cpp"
+#line 6792 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 151: /* layout_qualifier_id: IDENTIFIER  */
-#line 1355 "MachineIndependent/glslang.y"
+#line 1357 "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 6752 "MachineIndependent/glslang_tab.cpp"
+#line 6801 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
-#line 1359 "MachineIndependent/glslang.y"
+#line 1361 "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 6761 "MachineIndependent/glslang_tab.cpp"
+#line 6810 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 153: /* layout_qualifier_id: SHARED  */
-#line 1363 "MachineIndependent/glslang.y"
+#line 1365 "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 6771 "MachineIndependent/glslang_tab.cpp"
+#line 6820 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 154: /* precise_qualifier: PRECISE  */
-#line 1372 "MachineIndependent/glslang.y"
+#line 1374 "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 6782 "MachineIndependent/glslang_tab.cpp"
+#line 6831 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 155: /* type_qualifier: single_type_qualifier  */
-#line 1382 "MachineIndependent/glslang.y"
+#line 1384 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6790 "MachineIndependent/glslang_tab.cpp"
+#line 6839 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 156: /* type_qualifier: type_qualifier single_type_qualifier  */
-#line 1385 "MachineIndependent/glslang.y"
+#line 1387 "MachineIndependent/glslang.y"
                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -6799,151 +6848,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 6803 "MachineIndependent/glslang_tab.cpp"
+#line 6852 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 157: /* single_type_qualifier: storage_qualifier  */
-#line 1396 "MachineIndependent/glslang.y"
+#line 1398 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6811 "MachineIndependent/glslang_tab.cpp"
+#line 6860 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 158: /* single_type_qualifier: layout_qualifier  */
-#line 1399 "MachineIndependent/glslang.y"
+#line 1401 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6819 "MachineIndependent/glslang_tab.cpp"
+#line 6868 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 159: /* single_type_qualifier: precision_qualifier  */
-#line 1402 "MachineIndependent/glslang.y"
+#line 1404 "MachineIndependent/glslang.y"
                           {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6828 "MachineIndependent/glslang_tab.cpp"
+#line 6877 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 160: /* single_type_qualifier: interpolation_qualifier  */
-#line 1406 "MachineIndependent/glslang.y"
+#line 1408 "MachineIndependent/glslang.y"
                               {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6837 "MachineIndependent/glslang_tab.cpp"
+#line 6886 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 161: /* single_type_qualifier: invariant_qualifier  */
-#line 1410 "MachineIndependent/glslang.y"
+#line 1412 "MachineIndependent/glslang.y"
                           {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6846 "MachineIndependent/glslang_tab.cpp"
+#line 6895 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 162: /* single_type_qualifier: precise_qualifier  */
-#line 1415 "MachineIndependent/glslang.y"
+#line 1417 "MachineIndependent/glslang.y"
                         {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6855 "MachineIndependent/glslang_tab.cpp"
+#line 6904 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 163: /* single_type_qualifier: non_uniform_qualifier  */
-#line 1419 "MachineIndependent/glslang.y"
+#line 1421 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6863 "MachineIndependent/glslang_tab.cpp"
+#line 6912 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 164: /* single_type_qualifier: spirv_storage_class_qualifier  */
-#line 1422 "MachineIndependent/glslang.y"
+#line 1424 "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 6873 "MachineIndependent/glslang_tab.cpp"
+#line 6922 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 165: /* single_type_qualifier: spirv_decorate_qualifier  */
-#line 1427 "MachineIndependent/glslang.y"
+#line 1429 "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 6882 "MachineIndependent/glslang_tab.cpp"
+#line 6931 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
-#line 1431 "MachineIndependent/glslang.y"
+#line 1433 "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 6892 "MachineIndependent/glslang_tab.cpp"
+#line 6941 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 167: /* single_type_qualifier: SPIRV_LITERAL  */
-#line 1436 "MachineIndependent/glslang.y"
+#line 1438 "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 6902 "MachineIndependent/glslang_tab.cpp"
+#line 6951 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 168: /* storage_qualifier: CONST  */
-#line 1445 "MachineIndependent/glslang.y"
+#line 1447 "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 6911 "MachineIndependent/glslang_tab.cpp"
+#line 6960 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 169: /* storage_qualifier: INOUT  */
-#line 1449 "MachineIndependent/glslang.y"
+#line 1451 "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 6921 "MachineIndependent/glslang_tab.cpp"
+#line 6970 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 170: /* storage_qualifier: IN  */
-#line 1454 "MachineIndependent/glslang.y"
+#line 1456 "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 6932 "MachineIndependent/glslang_tab.cpp"
+#line 6981 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 171: /* storage_qualifier: OUT  */
-#line 1460 "MachineIndependent/glslang.y"
+#line 1462 "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 6943 "MachineIndependent/glslang_tab.cpp"
+#line 6992 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 172: /* storage_qualifier: CENTROID  */
-#line 1466 "MachineIndependent/glslang.y"
+#line 1468 "MachineIndependent/glslang.y"
                {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -6951,21 +7000,31 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 6955 "MachineIndependent/glslang_tab.cpp"
+#line 7004 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 173: /* storage_qualifier: UNIFORM  */
-#line 1473 "MachineIndependent/glslang.y"
+#line 1475 "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 6965 "MachineIndependent/glslang_tab.cpp"
+#line 7014 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 174: /* storage_qualifier: SHARED  */
-#line 1478 "MachineIndependent/glslang.y"
+  case 174: /* storage_qualifier: TILEIMAGEEXT  */
+#line 1480 "MachineIndependent/glslang.y"
+                   {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "tileImageEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqTileImageEXT;
+    }
+#line 7024 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 175: /* storage_qualifier: SHARED  */
+#line 1485 "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");
@@ -6974,21 +7033,21 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 6978 "MachineIndependent/glslang_tab.cpp"
+#line 7037 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 175: /* storage_qualifier: BUFFER  */
-#line 1486 "MachineIndependent/glslang.y"
+  case 176: /* storage_qualifier: BUFFER  */
+#line 1493 "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 6988 "MachineIndependent/glslang_tab.cpp"
+#line 7047 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 176: /* storage_qualifier: ATTRIBUTE  */
-#line 1492 "MachineIndependent/glslang.y"
+  case 177: /* storage_qualifier: ATTRIBUTE  */
+#line 1499 "MachineIndependent/glslang.y"
                 {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -7001,11 +7060,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 7005 "MachineIndependent/glslang_tab.cpp"
+#line 7064 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 177: /* storage_qualifier: VARYING  */
-#line 1504 "MachineIndependent/glslang.y"
+  case 178: /* storage_qualifier: VARYING  */
+#line 1511 "MachineIndependent/glslang.y"
               {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -7020,32 +7079,32 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 7024 "MachineIndependent/glslang_tab.cpp"
+#line 7083 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 178: /* storage_qualifier: PATCH  */
-#line 1518 "MachineIndependent/glslang.y"
+  case 179: /* storage_qualifier: PATCH  */
+#line 1525 "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 7035 "MachineIndependent/glslang_tab.cpp"
+#line 7094 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 179: /* storage_qualifier: SAMPLE  */
-#line 1524 "MachineIndependent/glslang.y"
+  case 180: /* storage_qualifier: SAMPLE  */
+#line 1531 "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 7045 "MachineIndependent/glslang_tab.cpp"
+#line 7104 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 180: /* storage_qualifier: HITATTRNV  */
-#line 1529 "MachineIndependent/glslang.y"
+  case 181: /* storage_qualifier: HITATTRNV  */
+#line 1536 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7054,11 +7113,24 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7058 "MachineIndependent/glslang_tab.cpp"
+#line 7117 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 181: /* storage_qualifier: HITATTREXT  */
-#line 1537 "MachineIndependent/glslang.y"
+  case 182: /* storage_qualifier: HITOBJECTATTRNV  */
+#line 1544 "MachineIndependent/glslang.y"
+                          {
+        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
+            | EShLangMissMask), "hitObjectAttributeNV");
+        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV;
+	}
+#line 7130 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 183: /* storage_qualifier: HITATTREXT  */
+#line 1552 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7067,11 +7139,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7071 "MachineIndependent/glslang_tab.cpp"
+#line 7143 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 182: /* storage_qualifier: PAYLOADNV  */
-#line 1545 "MachineIndependent/glslang.y"
+  case 184: /* storage_qualifier: PAYLOADNV  */
+#line 1560 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7080,11 +7152,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7084 "MachineIndependent/glslang_tab.cpp"
+#line 7156 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 183: /* storage_qualifier: PAYLOADEXT  */
-#line 1553 "MachineIndependent/glslang.y"
+  case 185: /* storage_qualifier: PAYLOADEXT  */
+#line 1568 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7093,11 +7165,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7097 "MachineIndependent/glslang_tab.cpp"
+#line 7169 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 184: /* storage_qualifier: PAYLOADINNV  */
-#line 1561 "MachineIndependent/glslang.y"
+  case 186: /* storage_qualifier: PAYLOADINNV  */
+#line 1576 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7106,11 +7178,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7110 "MachineIndependent/glslang_tab.cpp"
+#line 7182 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 185: /* storage_qualifier: PAYLOADINEXT  */
-#line 1569 "MachineIndependent/glslang.y"
+  case 187: /* storage_qualifier: PAYLOADINEXT  */
+#line 1584 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7119,11 +7191,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7123 "MachineIndependent/glslang_tab.cpp"
+#line 7195 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 186: /* storage_qualifier: CALLDATANV  */
-#line 1577 "MachineIndependent/glslang.y"
+  case 188: /* storage_qualifier: CALLDATANV  */
+#line 1592 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7132,11 +7204,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7136 "MachineIndependent/glslang_tab.cpp"
+#line 7208 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 187: /* storage_qualifier: CALLDATAEXT  */
-#line 1585 "MachineIndependent/glslang.y"
+  case 189: /* storage_qualifier: CALLDATAEXT  */
+#line 1600 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7145,11 +7217,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7149 "MachineIndependent/glslang_tab.cpp"
+#line 7221 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 188: /* storage_qualifier: CALLDATAINNV  */
-#line 1593 "MachineIndependent/glslang.y"
+  case 190: /* storage_qualifier: CALLDATAINNV  */
+#line 1608 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
@@ -7157,11 +7229,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7161 "MachineIndependent/glslang_tab.cpp"
+#line 7233 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 189: /* storage_qualifier: CALLDATAINEXT  */
-#line 1600 "MachineIndependent/glslang.y"
+  case 191: /* storage_qualifier: CALLDATAINEXT  */
+#line 1615 "MachineIndependent/glslang.y"
                     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
@@ -7169,138 +7241,138 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7173 "MachineIndependent/glslang_tab.cpp"
+#line 7245 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 190: /* storage_qualifier: COHERENT  */
-#line 1607 "MachineIndependent/glslang.y"
+  case 192: /* storage_qualifier: COHERENT  */
+#line 1622 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 7182 "MachineIndependent/glslang_tab.cpp"
+#line 7254 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 191: /* storage_qualifier: DEVICECOHERENT  */
-#line 1611 "MachineIndependent/glslang.y"
+  case 193: /* storage_qualifier: DEVICECOHERENT  */
+#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, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 7192 "MachineIndependent/glslang_tab.cpp"
+#line 7264 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 192: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
-#line 1616 "MachineIndependent/glslang.y"
+  case 194: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
+#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, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 7202 "MachineIndependent/glslang_tab.cpp"
+#line 7274 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 193: /* storage_qualifier: WORKGROUPCOHERENT  */
-#line 1621 "MachineIndependent/glslang.y"
+  case 195: /* storage_qualifier: WORKGROUPCOHERENT  */
+#line 1636 "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 7212 "MachineIndependent/glslang_tab.cpp"
+#line 7284 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 194: /* storage_qualifier: SUBGROUPCOHERENT  */
-#line 1626 "MachineIndependent/glslang.y"
+  case 196: /* storage_qualifier: SUBGROUPCOHERENT  */
+#line 1641 "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 7222 "MachineIndependent/glslang_tab.cpp"
+#line 7294 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 195: /* storage_qualifier: NONPRIVATE  */
-#line 1631 "MachineIndependent/glslang.y"
+  case 197: /* storage_qualifier: NONPRIVATE  */
+#line 1646 "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 7232 "MachineIndependent/glslang_tab.cpp"
+#line 7304 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 196: /* storage_qualifier: SHADERCALLCOHERENT  */
-#line 1636 "MachineIndependent/glslang.y"
+  case 198: /* storage_qualifier: SHADERCALLCOHERENT  */
+#line 1651 "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 7242 "MachineIndependent/glslang_tab.cpp"
+#line 7314 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 197: /* storage_qualifier: VOLATILE  */
-#line 1641 "MachineIndependent/glslang.y"
+  case 199: /* storage_qualifier: VOLATILE  */
+#line 1656 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 7251 "MachineIndependent/glslang_tab.cpp"
+#line 7323 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 198: /* storage_qualifier: RESTRICT  */
-#line 1645 "MachineIndependent/glslang.y"
+  case 200: /* storage_qualifier: RESTRICT  */
+#line 1660 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 7260 "MachineIndependent/glslang_tab.cpp"
+#line 7332 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 199: /* storage_qualifier: READONLY  */
-#line 1649 "MachineIndependent/glslang.y"
+  case 201: /* storage_qualifier: READONLY  */
+#line 1664 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 7269 "MachineIndependent/glslang_tab.cpp"
+#line 7341 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 200: /* storage_qualifier: WRITEONLY  */
-#line 1653 "MachineIndependent/glslang.y"
+  case 202: /* storage_qualifier: WRITEONLY  */
+#line 1668 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 7278 "MachineIndependent/glslang_tab.cpp"
+#line 7350 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 201: /* storage_qualifier: SUBROUTINE  */
-#line 1657 "MachineIndependent/glslang.y"
+  case 203: /* storage_qualifier: SUBROUTINE  */
+#line 1672 "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 7289 "MachineIndependent/glslang_tab.cpp"
+#line 7361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 202: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
-#line 1663 "MachineIndependent/glslang.y"
+  case 204: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
+#line 1678 "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 7300 "MachineIndependent/glslang_tab.cpp"
+#line 7372 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 203: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
-#line 1669 "MachineIndependent/glslang.y"
+  case 205: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
+#line 1684 "MachineIndependent/glslang.y"
                               {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT");
@@ -7308,48 +7380,48 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT;
     }
-#line 7312 "MachineIndependent/glslang_tab.cpp"
+#line 7384 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 204: /* non_uniform_qualifier: NONUNIFORM  */
-#line 1681 "MachineIndependent/glslang.y"
+  case 206: /* non_uniform_qualifier: NONUNIFORM  */
+#line 1696 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 7321 "MachineIndependent/glslang_tab.cpp"
+#line 7393 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 205: /* type_name_list: IDENTIFIER  */
-#line 1688 "MachineIndependent/glslang.y"
+  case 207: /* type_name_list: IDENTIFIER  */
+#line 1703 "MachineIndependent/glslang.y"
                  {
         // TODO
     }
-#line 7329 "MachineIndependent/glslang_tab.cpp"
+#line 7401 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 206: /* type_name_list: type_name_list COMMA IDENTIFIER  */
-#line 1691 "MachineIndependent/glslang.y"
+  case 208: /* type_name_list: type_name_list COMMA IDENTIFIER  */
+#line 1706 "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 7339 "MachineIndependent/glslang_tab.cpp"
+#line 7411 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 207: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
-#line 1700 "MachineIndependent/glslang.y"
+  case 209: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
+#line 1715 "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 7349 "MachineIndependent/glslang_tab.cpp"
+#line 7421 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 208: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
-#line 1705 "MachineIndependent/glslang.y"
+  case 210: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
+#line 1720 "MachineIndependent/glslang.y"
                                                                            {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-2].interm.type);
@@ -7357,21 +7429,21 @@
         (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 7361 "MachineIndependent/glslang_tab.cpp"
+#line 7433 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 209: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
-#line 1715 "MachineIndependent/glslang.y"
+  case 211: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
+#line 1730 "MachineIndependent/glslang.y"
                                  {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7371 "MachineIndependent/glslang_tab.cpp"
+#line 7443 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 210: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1720 "MachineIndependent/glslang.y"
+  case 212: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1735 "MachineIndependent/glslang.y"
                                                         {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -7380,20 +7452,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7384 "MachineIndependent/glslang_tab.cpp"
+#line 7456 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 211: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
-#line 1728 "MachineIndependent/glslang.y"
+  case 213: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
+#line 1743 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7393 "MachineIndependent/glslang_tab.cpp"
+#line 7465 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 212: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1732 "MachineIndependent/glslang.y"
+  case 214: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1747 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -7401,35 +7473,35 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7405 "MachineIndependent/glslang_tab.cpp"
+#line 7477 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 213: /* type_parameter_specifier_opt: type_parameter_specifier  */
-#line 1742 "MachineIndependent/glslang.y"
+  case 215: /* type_parameter_specifier_opt: type_parameter_specifier  */
+#line 1757 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 7413 "MachineIndependent/glslang_tab.cpp"
+#line 7485 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 214: /* type_parameter_specifier_opt: %empty  */
-#line 1745 "MachineIndependent/glslang.y"
+  case 216: /* type_parameter_specifier_opt: %empty  */
+#line 1760 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeParameters) = 0;
     }
-#line 7421 "MachineIndependent/glslang_tab.cpp"
+#line 7493 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 215: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
-#line 1751 "MachineIndependent/glslang.y"
+  case 217: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
+#line 1766 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 7429 "MachineIndependent/glslang_tab.cpp"
+#line 7501 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 216: /* type_parameter_specifier_list: unary_expression  */
-#line 1757 "MachineIndependent/glslang.y"
+  case 218: /* type_parameter_specifier_list: unary_expression  */
+#line 1772 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.typeParameters) = new TArraySizes;
 
@@ -7437,11 +7509,11 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 7441 "MachineIndependent/glslang_tab.cpp"
+#line 7513 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 217: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
-#line 1764 "MachineIndependent/glslang.y"
+  case 219: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
+#line 1779 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 
@@ -7449,300 +7521,300 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 7453 "MachineIndependent/glslang_tab.cpp"
+#line 7525 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 218: /* type_specifier_nonarray: VOID  */
-#line 1774 "MachineIndependent/glslang.y"
+  case 220: /* type_specifier_nonarray: VOID  */
+#line 1789 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 7462 "MachineIndependent/glslang_tab.cpp"
+#line 7534 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 219: /* type_specifier_nonarray: FLOAT  */
-#line 1778 "MachineIndependent/glslang.y"
+  case 221: /* type_specifier_nonarray: FLOAT  */
+#line 1793 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 7471 "MachineIndependent/glslang_tab.cpp"
+#line 7543 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 220: /* type_specifier_nonarray: INT  */
-#line 1782 "MachineIndependent/glslang.y"
+  case 222: /* type_specifier_nonarray: INT  */
+#line 1797 "MachineIndependent/glslang.y"
           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 7480 "MachineIndependent/glslang_tab.cpp"
+#line 7552 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 221: /* type_specifier_nonarray: UINT  */
-#line 1786 "MachineIndependent/glslang.y"
+  case 223: /* type_specifier_nonarray: UINT  */
+#line 1801 "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 7490 "MachineIndependent/glslang_tab.cpp"
+#line 7562 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 222: /* type_specifier_nonarray: BOOL  */
-#line 1791 "MachineIndependent/glslang.y"
+  case 224: /* type_specifier_nonarray: BOOL  */
+#line 1806 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 7499 "MachineIndependent/glslang_tab.cpp"
+#line 7571 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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 = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 7509 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 7519 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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  */
+  case 225: /* type_specifier_nonarray: VEC2  */
 #line 1810 "MachineIndependent/glslang.y"
-            {
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 7539 "MachineIndependent/glslang_tab.cpp"
+#line 7581 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 227: /* type_specifier_nonarray: BVEC3  */
+  case 226: /* type_specifier_nonarray: VEC3  */
 #line 1815 "MachineIndependent/glslang.y"
-            {
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 7549 "MachineIndependent/glslang_tab.cpp"
+#line 7591 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 228: /* type_specifier_nonarray: BVEC4  */
+  case 227: /* type_specifier_nonarray: VEC4  */
 #line 1820 "MachineIndependent/glslang.y"
-            {
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 7559 "MachineIndependent/glslang_tab.cpp"
+#line 7601 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 229: /* type_specifier_nonarray: IVEC2  */
+  case 228: /* type_specifier_nonarray: BVEC2  */
 #line 1825 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).basicType = EbtBool;
         (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 7589 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 7600 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 7611 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 234: /* type_specifier_nonarray: UVEC4  */
-#line 1852 "MachineIndependent/glslang.y"
+  case 229: /* type_specifier_nonarray: BVEC3  */
+#line 1830 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7621 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 230: /* type_specifier_nonarray: BVEC4  */
+#line 1835 "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 7631 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 231: /* type_specifier_nonarray: IVEC2  */
+#line 1840 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7641 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 232: /* type_specifier_nonarray: IVEC3  */
+#line 1845 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7651 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 233: /* type_specifier_nonarray: IVEC4  */
+#line 1850 "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 7661 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 234: /* type_specifier_nonarray: UVEC2  */
+#line 1855 "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 7672 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 235: /* type_specifier_nonarray: UVEC3  */
+#line 1861 "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 7683 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 236: /* type_specifier_nonarray: UVEC4  */
+#line 1867 "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 7622 "MachineIndependent/glslang_tab.cpp"
+#line 7694 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 235: /* type_specifier_nonarray: MAT2  */
-#line 1858 "MachineIndependent/glslang.y"
+  case 237: /* type_specifier_nonarray: MAT2  */
+#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 7632 "MachineIndependent/glslang_tab.cpp"
+#line 7704 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 236: /* type_specifier_nonarray: MAT3  */
-#line 1863 "MachineIndependent/glslang.y"
+  case 238: /* type_specifier_nonarray: MAT3  */
+#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(3, 3);
     }
-#line 7642 "MachineIndependent/glslang_tab.cpp"
+#line 7714 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 237: /* type_specifier_nonarray: MAT4  */
-#line 1868 "MachineIndependent/glslang.y"
+  case 239: /* type_specifier_nonarray: MAT4  */
+#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(4, 4);
     }
-#line 7652 "MachineIndependent/glslang_tab.cpp"
+#line 7724 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 238: /* type_specifier_nonarray: MAT2X2  */
-#line 1873 "MachineIndependent/glslang.y"
+  case 240: /* type_specifier_nonarray: MAT2X2  */
+#line 1888 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7662 "MachineIndependent/glslang_tab.cpp"
+#line 7734 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 239: /* type_specifier_nonarray: MAT2X3  */
-#line 1878 "MachineIndependent/glslang.y"
+  case 241: /* type_specifier_nonarray: MAT2X3  */
+#line 1893 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7672 "MachineIndependent/glslang_tab.cpp"
+#line 7744 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 240: /* type_specifier_nonarray: MAT2X4  */
-#line 1883 "MachineIndependent/glslang.y"
+  case 242: /* type_specifier_nonarray: MAT2X4  */
+#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(2, 4);
     }
-#line 7682 "MachineIndependent/glslang_tab.cpp"
+#line 7754 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 241: /* type_specifier_nonarray: MAT3X2  */
-#line 1888 "MachineIndependent/glslang.y"
+  case 243: /* type_specifier_nonarray: MAT3X2  */
+#line 1903 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7692 "MachineIndependent/glslang_tab.cpp"
+#line 7764 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 242: /* type_specifier_nonarray: MAT3X3  */
-#line 1893 "MachineIndependent/glslang.y"
+  case 244: /* type_specifier_nonarray: MAT3X3  */
+#line 1908 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7702 "MachineIndependent/glslang_tab.cpp"
+#line 7774 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 243: /* type_specifier_nonarray: MAT3X4  */
-#line 1898 "MachineIndependent/glslang.y"
+  case 245: /* type_specifier_nonarray: MAT3X4  */
+#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(3, 4);
     }
-#line 7712 "MachineIndependent/glslang_tab.cpp"
+#line 7784 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 244: /* type_specifier_nonarray: MAT4X2  */
-#line 1903 "MachineIndependent/glslang.y"
+  case 246: /* type_specifier_nonarray: MAT4X2  */
+#line 1918 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7722 "MachineIndependent/glslang_tab.cpp"
+#line 7794 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 245: /* type_specifier_nonarray: MAT4X3  */
-#line 1908 "MachineIndependent/glslang.y"
+  case 247: /* type_specifier_nonarray: MAT4X3  */
+#line 1923 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7732 "MachineIndependent/glslang_tab.cpp"
+#line 7804 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 246: /* type_specifier_nonarray: MAT4X4  */
-#line 1913 "MachineIndependent/glslang.y"
+  case 248: /* type_specifier_nonarray: MAT4X4  */
+#line 1928 "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 7742 "MachineIndependent/glslang_tab.cpp"
+#line 7814 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 247: /* type_specifier_nonarray: DOUBLE  */
-#line 1919 "MachineIndependent/glslang.y"
+  case 249: /* type_specifier_nonarray: DOUBLE  */
+#line 1934 "MachineIndependent/glslang.y"
              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7750,562 +7822,562 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 7754 "MachineIndependent/glslang_tab.cpp"
+#line 7826 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 248: /* type_specifier_nonarray: FLOAT16_T  */
-#line 1926 "MachineIndependent/glslang.y"
+  case 250: /* type_specifier_nonarray: FLOAT16_T  */
+#line 1941 "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 7764 "MachineIndependent/glslang_tab.cpp"
+#line 7836 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 249: /* type_specifier_nonarray: FLOAT32_T  */
-#line 1931 "MachineIndependent/glslang.y"
+  case 251: /* type_specifier_nonarray: FLOAT32_T  */
+#line 1946 "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 7774 "MachineIndependent/glslang_tab.cpp"
+#line 7846 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 250: /* type_specifier_nonarray: FLOAT64_T  */
-#line 1936 "MachineIndependent/glslang.y"
+  case 252: /* type_specifier_nonarray: FLOAT64_T  */
+#line 1951 "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 7784 "MachineIndependent/glslang_tab.cpp"
+#line 7856 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 251: /* type_specifier_nonarray: INT8_T  */
-#line 1941 "MachineIndependent/glslang.y"
+  case 253: /* type_specifier_nonarray: INT8_T  */
+#line 1956 "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 7794 "MachineIndependent/glslang_tab.cpp"
+#line 7866 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 252: /* type_specifier_nonarray: UINT8_T  */
-#line 1946 "MachineIndependent/glslang.y"
+  case 254: /* type_specifier_nonarray: UINT8_T  */
+#line 1961 "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 7804 "MachineIndependent/glslang_tab.cpp"
+#line 7876 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 253: /* type_specifier_nonarray: INT16_T  */
-#line 1951 "MachineIndependent/glslang.y"
+  case 255: /* type_specifier_nonarray: INT16_T  */
+#line 1966 "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 7814 "MachineIndependent/glslang_tab.cpp"
+#line 7886 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 254: /* type_specifier_nonarray: UINT16_T  */
-#line 1956 "MachineIndependent/glslang.y"
+  case 256: /* type_specifier_nonarray: UINT16_T  */
+#line 1971 "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 7824 "MachineIndependent/glslang_tab.cpp"
+#line 7896 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 255: /* type_specifier_nonarray: INT32_T  */
-#line 1961 "MachineIndependent/glslang.y"
+  case 257: /* type_specifier_nonarray: INT32_T  */
+#line 1976 "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 7834 "MachineIndependent/glslang_tab.cpp"
+#line 7906 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 256: /* type_specifier_nonarray: UINT32_T  */
-#line 1966 "MachineIndependent/glslang.y"
+  case 258: /* type_specifier_nonarray: UINT32_T  */
+#line 1981 "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 7844 "MachineIndependent/glslang_tab.cpp"
+#line 7916 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 257: /* type_specifier_nonarray: INT64_T  */
-#line 1971 "MachineIndependent/glslang.y"
+  case 259: /* type_specifier_nonarray: INT64_T  */
+#line 1986 "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 7854 "MachineIndependent/glslang_tab.cpp"
+#line 7926 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 258: /* type_specifier_nonarray: UINT64_T  */
-#line 1976 "MachineIndependent/glslang.y"
+  case 260: /* type_specifier_nonarray: UINT64_T  */
+#line 1991 "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 7864 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(2);
-    }
-#line 7877 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(3);
-    }
-#line 7890 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setVector(4);
-    }
-#line 7903 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 7914 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 7925 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 7936 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 265: /* type_specifier_nonarray: F32VEC2  */
-#line 2023 "MachineIndependent/glslang.y"
+  case 261: /* type_specifier_nonarray: DVEC2  */
+#line 1996 "MachineIndependent/glslang.y"
+            {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7949 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 262: /* type_specifier_nonarray: DVEC3  */
+#line 2004 "MachineIndependent/glslang.y"
+            {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7962 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 263: /* type_specifier_nonarray: DVEC4  */
+#line 2012 "MachineIndependent/glslang.y"
+            {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(4);
+    }
+#line 7975 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 264: /* type_specifier_nonarray: F16VEC2  */
+#line 2020 "MachineIndependent/glslang.y"
+              {
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7986 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 265: /* type_specifier_nonarray: F16VEC3  */
+#line 2026 "MachineIndependent/glslang.y"
+              {
+        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7997 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 266: /* type_specifier_nonarray: F16VEC4  */
+#line 2032 "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 8008 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 267: /* type_specifier_nonarray: F32VEC2  */
+#line 2038 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 7947 "MachineIndependent/glslang_tab.cpp"
+#line 8019 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 266: /* type_specifier_nonarray: F32VEC3  */
-#line 2029 "MachineIndependent/glslang.y"
+  case 268: /* type_specifier_nonarray: F32VEC3  */
+#line 2044 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 7958 "MachineIndependent/glslang_tab.cpp"
+#line 8030 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 267: /* type_specifier_nonarray: F32VEC4  */
-#line 2035 "MachineIndependent/glslang.y"
+  case 269: /* type_specifier_nonarray: F32VEC4  */
+#line 2050 "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 7969 "MachineIndependent/glslang_tab.cpp"
+#line 8041 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 268: /* type_specifier_nonarray: F64VEC2  */
-#line 2041 "MachineIndependent/glslang.y"
+  case 270: /* type_specifier_nonarray: F64VEC2  */
+#line 2056 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 7980 "MachineIndependent/glslang_tab.cpp"
+#line 8052 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 269: /* type_specifier_nonarray: F64VEC3  */
-#line 2047 "MachineIndependent/glslang.y"
+  case 271: /* type_specifier_nonarray: F64VEC3  */
+#line 2062 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 7991 "MachineIndependent/glslang_tab.cpp"
+#line 8063 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 270: /* type_specifier_nonarray: F64VEC4  */
-#line 2053 "MachineIndependent/glslang.y"
+  case 272: /* type_specifier_nonarray: F64VEC4  */
+#line 2068 "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 8002 "MachineIndependent/glslang_tab.cpp"
+#line 8074 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 271: /* type_specifier_nonarray: I8VEC2  */
-#line 2059 "MachineIndependent/glslang.y"
+  case 273: /* type_specifier_nonarray: I8VEC2  */
+#line 2074 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(2);
     }
-#line 8013 "MachineIndependent/glslang_tab.cpp"
+#line 8085 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 272: /* type_specifier_nonarray: I8VEC3  */
-#line 2065 "MachineIndependent/glslang.y"
+  case 274: /* type_specifier_nonarray: I8VEC3  */
+#line 2080 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(3);
     }
-#line 8024 "MachineIndependent/glslang_tab.cpp"
+#line 8096 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 273: /* type_specifier_nonarray: I8VEC4  */
-#line 2071 "MachineIndependent/glslang.y"
+  case 275: /* type_specifier_nonarray: I8VEC4  */
+#line 2086 "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 8035 "MachineIndependent/glslang_tab.cpp"
+#line 8107 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 274: /* type_specifier_nonarray: I16VEC2  */
-#line 2077 "MachineIndependent/glslang.y"
+  case 276: /* type_specifier_nonarray: I16VEC2  */
+#line 2092 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(2);
     }
-#line 8046 "MachineIndependent/glslang_tab.cpp"
+#line 8118 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 275: /* type_specifier_nonarray: I16VEC3  */
-#line 2083 "MachineIndependent/glslang.y"
+  case 277: /* type_specifier_nonarray: I16VEC3  */
+#line 2098 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(3);
     }
-#line 8057 "MachineIndependent/glslang_tab.cpp"
+#line 8129 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 276: /* type_specifier_nonarray: I16VEC4  */
-#line 2089 "MachineIndependent/glslang.y"
+  case 278: /* type_specifier_nonarray: I16VEC4  */
+#line 2104 "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 8068 "MachineIndependent/glslang_tab.cpp"
+#line 8140 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 277: /* type_specifier_nonarray: I32VEC2  */
-#line 2095 "MachineIndependent/glslang.y"
+  case 279: /* type_specifier_nonarray: I32VEC2  */
+#line 2110 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 8079 "MachineIndependent/glslang_tab.cpp"
+#line 8151 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 278: /* type_specifier_nonarray: I32VEC3  */
-#line 2101 "MachineIndependent/glslang.y"
+  case 280: /* type_specifier_nonarray: I32VEC3  */
+#line 2116 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 8090 "MachineIndependent/glslang_tab.cpp"
+#line 8162 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 279: /* type_specifier_nonarray: I32VEC4  */
-#line 2107 "MachineIndependent/glslang.y"
+  case 281: /* type_specifier_nonarray: I32VEC4  */
+#line 2122 "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 8101 "MachineIndependent/glslang_tab.cpp"
+#line 8173 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 280: /* type_specifier_nonarray: I64VEC2  */
-#line 2113 "MachineIndependent/glslang.y"
+  case 282: /* type_specifier_nonarray: I64VEC2  */
+#line 2128 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 8112 "MachineIndependent/glslang_tab.cpp"
+#line 8184 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 281: /* type_specifier_nonarray: I64VEC3  */
-#line 2119 "MachineIndependent/glslang.y"
+  case 283: /* type_specifier_nonarray: I64VEC3  */
+#line 2134 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 8123 "MachineIndependent/glslang_tab.cpp"
+#line 8195 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 282: /* type_specifier_nonarray: I64VEC4  */
-#line 2125 "MachineIndependent/glslang.y"
+  case 284: /* type_specifier_nonarray: I64VEC4  */
+#line 2140 "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 8134 "MachineIndependent/glslang_tab.cpp"
+#line 8206 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 283: /* type_specifier_nonarray: U8VEC2  */
-#line 2131 "MachineIndependent/glslang.y"
+  case 285: /* type_specifier_nonarray: U8VEC2  */
+#line 2146 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 8145 "MachineIndependent/glslang_tab.cpp"
+#line 8217 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 284: /* type_specifier_nonarray: U8VEC3  */
-#line 2137 "MachineIndependent/glslang.y"
+  case 286: /* type_specifier_nonarray: U8VEC3  */
+#line 2152 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(3);
     }
-#line 8156 "MachineIndependent/glslang_tab.cpp"
+#line 8228 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 285: /* type_specifier_nonarray: U8VEC4  */
-#line 2143 "MachineIndependent/glslang.y"
+  case 287: /* type_specifier_nonarray: U8VEC4  */
+#line 2158 "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 8167 "MachineIndependent/glslang_tab.cpp"
+#line 8239 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 286: /* type_specifier_nonarray: U16VEC2  */
-#line 2149 "MachineIndependent/glslang.y"
+  case 288: /* type_specifier_nonarray: U16VEC2  */
+#line 2164 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 8178 "MachineIndependent/glslang_tab.cpp"
+#line 8250 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 287: /* type_specifier_nonarray: U16VEC3  */
-#line 2155 "MachineIndependent/glslang.y"
+  case 289: /* type_specifier_nonarray: U16VEC3  */
+#line 2170 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(3);
     }
-#line 8189 "MachineIndependent/glslang_tab.cpp"
+#line 8261 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 288: /* type_specifier_nonarray: U16VEC4  */
-#line 2161 "MachineIndependent/glslang.y"
+  case 290: /* type_specifier_nonarray: U16VEC4  */
+#line 2176 "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 8200 "MachineIndependent/glslang_tab.cpp"
+#line 8272 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 289: /* type_specifier_nonarray: U32VEC2  */
-#line 2167 "MachineIndependent/glslang.y"
+  case 291: /* type_specifier_nonarray: U32VEC2  */
+#line 2182 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 8211 "MachineIndependent/glslang_tab.cpp"
+#line 8283 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 290: /* type_specifier_nonarray: U32VEC3  */
-#line 2173 "MachineIndependent/glslang.y"
+  case 292: /* type_specifier_nonarray: U32VEC3  */
+#line 2188 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 8222 "MachineIndependent/glslang_tab.cpp"
+#line 8294 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 291: /* type_specifier_nonarray: U32VEC4  */
-#line 2179 "MachineIndependent/glslang.y"
+  case 293: /* type_specifier_nonarray: U32VEC4  */
+#line 2194 "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 8233 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 8244 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 8255 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 8266 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 8279 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 8292 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
 #line 8305 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 298: /* type_specifier_nonarray: DMAT2X2  */
-#line 2227 "MachineIndependent/glslang.y"
+  case 294: /* type_specifier_nonarray: U64VEC2  */
+#line 2200 "MachineIndependent/glslang.y"
+              {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 8316 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 295: /* type_specifier_nonarray: U64VEC3  */
+#line 2206 "MachineIndependent/glslang.y"
+              {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(3);
+    }
+#line 8327 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 296: /* type_specifier_nonarray: U64VEC4  */
+#line 2212 "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 8338 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 297: /* type_specifier_nonarray: DMAT2  */
+#line 2218 "MachineIndependent/glslang.y"
+            {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 8351 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 298: /* type_specifier_nonarray: DMAT3  */
+#line 2226 "MachineIndependent/glslang.y"
+            {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 8364 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 299: /* type_specifier_nonarray: DMAT4  */
+#line 2234 "MachineIndependent/glslang.y"
+            {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 8377 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 300: /* type_specifier_nonarray: DMAT2X2  */
+#line 2242 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8314,11 +8386,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8318 "MachineIndependent/glslang_tab.cpp"
+#line 8390 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 299: /* type_specifier_nonarray: DMAT2X3  */
-#line 2235 "MachineIndependent/glslang.y"
+  case 301: /* type_specifier_nonarray: DMAT2X3  */
+#line 2250 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8327,11 +8399,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8331 "MachineIndependent/glslang_tab.cpp"
+#line 8403 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 300: /* type_specifier_nonarray: DMAT2X4  */
-#line 2243 "MachineIndependent/glslang.y"
+  case 302: /* type_specifier_nonarray: DMAT2X4  */
+#line 2258 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8340,11 +8412,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8344 "MachineIndependent/glslang_tab.cpp"
+#line 8416 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 301: /* type_specifier_nonarray: DMAT3X2  */
-#line 2251 "MachineIndependent/glslang.y"
+  case 303: /* type_specifier_nonarray: DMAT3X2  */
+#line 2266 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8353,11 +8425,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8357 "MachineIndependent/glslang_tab.cpp"
+#line 8429 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 302: /* type_specifier_nonarray: DMAT3X3  */
-#line 2259 "MachineIndependent/glslang.y"
+  case 304: /* type_specifier_nonarray: DMAT3X3  */
+#line 2274 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8366,11 +8438,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8370 "MachineIndependent/glslang_tab.cpp"
+#line 8442 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 303: /* type_specifier_nonarray: DMAT3X4  */
-#line 2267 "MachineIndependent/glslang.y"
+  case 305: /* type_specifier_nonarray: DMAT3X4  */
+#line 2282 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8379,2267 +8451,2300 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8383 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 2);
-    }
-#line 8396 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 3);
-    }
-#line 8409 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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())
-            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 8422 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 8433 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 8444 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  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 8455 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 310: /* type_specifier_nonarray: F16MAT2X2  */
-#line 2317 "MachineIndependent/glslang.y"
+  case 306: /* type_specifier_nonarray: DMAT4X2  */
+#line 2290 "MachineIndependent/glslang.y"
+              {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 2);
+    }
+#line 8468 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 307: /* type_specifier_nonarray: DMAT4X3  */
+#line 2298 "MachineIndependent/glslang.y"
+              {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 3);
+    }
+#line 8481 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 308: /* type_specifier_nonarray: DMAT4X4  */
+#line 2306 "MachineIndependent/glslang.y"
+              {
+        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
+        if (! parseContext.symbolTable.atBuiltInLevel())
+            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 8494 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 309: /* type_specifier_nonarray: F16MAT2  */
+#line 2314 "MachineIndependent/glslang.y"
+              {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 8505 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 310: /* type_specifier_nonarray: F16MAT3  */
+#line 2320 "MachineIndependent/glslang.y"
+              {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 8516 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 311: /* type_specifier_nonarray: F16MAT4  */
+#line 2326 "MachineIndependent/glslang.y"
+              {
+        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat16;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 8527 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 312: /* type_specifier_nonarray: F16MAT2X2  */
+#line 2332 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8466 "MachineIndependent/glslang_tab.cpp"
+#line 8538 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 311: /* type_specifier_nonarray: F16MAT2X3  */
-#line 2323 "MachineIndependent/glslang.y"
+  case 313: /* type_specifier_nonarray: F16MAT2X3  */
+#line 2338 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8477 "MachineIndependent/glslang_tab.cpp"
+#line 8549 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 312: /* type_specifier_nonarray: F16MAT2X4  */
-#line 2329 "MachineIndependent/glslang.y"
+  case 314: /* type_specifier_nonarray: F16MAT2X4  */
+#line 2344 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8488 "MachineIndependent/glslang_tab.cpp"
+#line 8560 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 313: /* type_specifier_nonarray: F16MAT3X2  */
-#line 2335 "MachineIndependent/glslang.y"
+  case 315: /* type_specifier_nonarray: F16MAT3X2  */
+#line 2350 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8499 "MachineIndependent/glslang_tab.cpp"
+#line 8571 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 314: /* type_specifier_nonarray: F16MAT3X3  */
-#line 2341 "MachineIndependent/glslang.y"
+  case 316: /* type_specifier_nonarray: F16MAT3X3  */
+#line 2356 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8510 "MachineIndependent/glslang_tab.cpp"
+#line 8582 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 315: /* type_specifier_nonarray: F16MAT3X4  */
-#line 2347 "MachineIndependent/glslang.y"
+  case 317: /* type_specifier_nonarray: F16MAT3X4  */
+#line 2362 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8521 "MachineIndependent/glslang_tab.cpp"
+#line 8593 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 316: /* type_specifier_nonarray: F16MAT4X2  */
-#line 2353 "MachineIndependent/glslang.y"
+  case 318: /* type_specifier_nonarray: F16MAT4X2  */
+#line 2368 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8532 "MachineIndependent/glslang_tab.cpp"
+#line 8604 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 317: /* type_specifier_nonarray: F16MAT4X3  */
-#line 2359 "MachineIndependent/glslang.y"
+  case 319: /* type_specifier_nonarray: F16MAT4X3  */
+#line 2374 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8543 "MachineIndependent/glslang_tab.cpp"
+#line 8615 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 318: /* type_specifier_nonarray: F16MAT4X4  */
-#line 2365 "MachineIndependent/glslang.y"
+  case 320: /* type_specifier_nonarray: F16MAT4X4  */
+#line 2380 "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 8554 "MachineIndependent/glslang_tab.cpp"
+#line 8626 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 319: /* type_specifier_nonarray: F32MAT2  */
-#line 2371 "MachineIndependent/glslang.y"
+  case 321: /* type_specifier_nonarray: F32MAT2  */
+#line 2386 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8565 "MachineIndependent/glslang_tab.cpp"
+#line 8637 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 320: /* type_specifier_nonarray: F32MAT3  */
-#line 2377 "MachineIndependent/glslang.y"
+  case 322: /* type_specifier_nonarray: F32MAT3  */
+#line 2392 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8576 "MachineIndependent/glslang_tab.cpp"
+#line 8648 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 321: /* type_specifier_nonarray: F32MAT4  */
-#line 2383 "MachineIndependent/glslang.y"
+  case 323: /* type_specifier_nonarray: F32MAT4  */
+#line 2398 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8587 "MachineIndependent/glslang_tab.cpp"
+#line 8659 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 322: /* type_specifier_nonarray: F32MAT2X2  */
-#line 2389 "MachineIndependent/glslang.y"
+  case 324: /* type_specifier_nonarray: F32MAT2X2  */
+#line 2404 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8598 "MachineIndependent/glslang_tab.cpp"
+#line 8670 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 323: /* type_specifier_nonarray: F32MAT2X3  */
-#line 2395 "MachineIndependent/glslang.y"
+  case 325: /* type_specifier_nonarray: F32MAT2X3  */
+#line 2410 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8609 "MachineIndependent/glslang_tab.cpp"
+#line 8681 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 324: /* type_specifier_nonarray: F32MAT2X4  */
-#line 2401 "MachineIndependent/glslang.y"
+  case 326: /* type_specifier_nonarray: F32MAT2X4  */
+#line 2416 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8620 "MachineIndependent/glslang_tab.cpp"
+#line 8692 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 325: /* type_specifier_nonarray: F32MAT3X2  */
-#line 2407 "MachineIndependent/glslang.y"
+  case 327: /* type_specifier_nonarray: F32MAT3X2  */
+#line 2422 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8631 "MachineIndependent/glslang_tab.cpp"
+#line 8703 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 326: /* type_specifier_nonarray: F32MAT3X3  */
-#line 2413 "MachineIndependent/glslang.y"
+  case 328: /* type_specifier_nonarray: F32MAT3X3  */
+#line 2428 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8642 "MachineIndependent/glslang_tab.cpp"
+#line 8714 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 327: /* type_specifier_nonarray: F32MAT3X4  */
-#line 2419 "MachineIndependent/glslang.y"
+  case 329: /* type_specifier_nonarray: F32MAT3X4  */
+#line 2434 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8653 "MachineIndependent/glslang_tab.cpp"
+#line 8725 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 328: /* type_specifier_nonarray: F32MAT4X2  */
-#line 2425 "MachineIndependent/glslang.y"
+  case 330: /* type_specifier_nonarray: F32MAT4X2  */
+#line 2440 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8664 "MachineIndependent/glslang_tab.cpp"
+#line 8736 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 329: /* type_specifier_nonarray: F32MAT4X3  */
-#line 2431 "MachineIndependent/glslang.y"
+  case 331: /* type_specifier_nonarray: F32MAT4X3  */
+#line 2446 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8675 "MachineIndependent/glslang_tab.cpp"
+#line 8747 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 330: /* type_specifier_nonarray: F32MAT4X4  */
-#line 2437 "MachineIndependent/glslang.y"
+  case 332: /* type_specifier_nonarray: F32MAT4X4  */
+#line 2452 "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 8686 "MachineIndependent/glslang_tab.cpp"
+#line 8758 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 331: /* type_specifier_nonarray: F64MAT2  */
-#line 2443 "MachineIndependent/glslang.y"
+  case 333: /* type_specifier_nonarray: F64MAT2  */
+#line 2458 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8697 "MachineIndependent/glslang_tab.cpp"
+#line 8769 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 332: /* type_specifier_nonarray: F64MAT3  */
-#line 2449 "MachineIndependent/glslang.y"
+  case 334: /* type_specifier_nonarray: F64MAT3  */
+#line 2464 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8708 "MachineIndependent/glslang_tab.cpp"
+#line 8780 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 333: /* type_specifier_nonarray: F64MAT4  */
-#line 2455 "MachineIndependent/glslang.y"
+  case 335: /* type_specifier_nonarray: F64MAT4  */
+#line 2470 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8719 "MachineIndependent/glslang_tab.cpp"
+#line 8791 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 334: /* type_specifier_nonarray: F64MAT2X2  */
-#line 2461 "MachineIndependent/glslang.y"
+  case 336: /* type_specifier_nonarray: F64MAT2X2  */
+#line 2476 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8730 "MachineIndependent/glslang_tab.cpp"
+#line 8802 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 335: /* type_specifier_nonarray: F64MAT2X3  */
-#line 2467 "MachineIndependent/glslang.y"
+  case 337: /* type_specifier_nonarray: F64MAT2X3  */
+#line 2482 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8741 "MachineIndependent/glslang_tab.cpp"
+#line 8813 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 336: /* type_specifier_nonarray: F64MAT2X4  */
-#line 2473 "MachineIndependent/glslang.y"
+  case 338: /* type_specifier_nonarray: F64MAT2X4  */
+#line 2488 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8752 "MachineIndependent/glslang_tab.cpp"
+#line 8824 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 337: /* type_specifier_nonarray: F64MAT3X2  */
-#line 2479 "MachineIndependent/glslang.y"
+  case 339: /* type_specifier_nonarray: F64MAT3X2  */
+#line 2494 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8763 "MachineIndependent/glslang_tab.cpp"
+#line 8835 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 338: /* type_specifier_nonarray: F64MAT3X3  */
-#line 2485 "MachineIndependent/glslang.y"
+  case 340: /* type_specifier_nonarray: F64MAT3X3  */
+#line 2500 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8774 "MachineIndependent/glslang_tab.cpp"
+#line 8846 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 339: /* type_specifier_nonarray: F64MAT3X4  */
-#line 2491 "MachineIndependent/glslang.y"
+  case 341: /* type_specifier_nonarray: F64MAT3X4  */
+#line 2506 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8785 "MachineIndependent/glslang_tab.cpp"
+#line 8857 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 340: /* type_specifier_nonarray: F64MAT4X2  */
-#line 2497 "MachineIndependent/glslang.y"
+  case 342: /* type_specifier_nonarray: F64MAT4X2  */
+#line 2512 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8796 "MachineIndependent/glslang_tab.cpp"
+#line 8868 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 341: /* type_specifier_nonarray: F64MAT4X3  */
-#line 2503 "MachineIndependent/glslang.y"
+  case 343: /* type_specifier_nonarray: F64MAT4X3  */
+#line 2518 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8807 "MachineIndependent/glslang_tab.cpp"
+#line 8879 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 342: /* type_specifier_nonarray: F64MAT4X4  */
-#line 2509 "MachineIndependent/glslang.y"
+  case 344: /* type_specifier_nonarray: F64MAT4X4  */
+#line 2524 "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 8818 "MachineIndependent/glslang_tab.cpp"
+#line 8890 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 343: /* type_specifier_nonarray: ACCSTRUCTNV  */
-#line 2515 "MachineIndependent/glslang.y"
+  case 345: /* type_specifier_nonarray: ACCSTRUCTNV  */
+#line 2530 "MachineIndependent/glslang.y"
                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 8827 "MachineIndependent/glslang_tab.cpp"
+#line 8899 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 344: /* type_specifier_nonarray: ACCSTRUCTEXT  */
-#line 2519 "MachineIndependent/glslang.y"
+  case 346: /* type_specifier_nonarray: ACCSTRUCTEXT  */
+#line 2534 "MachineIndependent/glslang.y"
                    {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 8836 "MachineIndependent/glslang_tab.cpp"
+#line 8908 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 345: /* type_specifier_nonarray: RAYQUERYEXT  */
-#line 2523 "MachineIndependent/glslang.y"
+  case 347: /* type_specifier_nonarray: RAYQUERYEXT  */
+#line 2538 "MachineIndependent/glslang.y"
                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtRayQuery;
     }
-#line 8845 "MachineIndependent/glslang_tab.cpp"
+#line 8917 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 346: /* type_specifier_nonarray: ATOMIC_UINT  */
-#line 2527 "MachineIndependent/glslang.y"
+  case 348: /* type_specifier_nonarray: ATOMIC_UINT  */
+#line 2542 "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 8855 "MachineIndependent/glslang_tab.cpp"
+#line 8927 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 347: /* type_specifier_nonarray: SAMPLER1D  */
-#line 2532 "MachineIndependent/glslang.y"
+  case 349: /* type_specifier_nonarray: SAMPLER1D  */
+#line 2547 "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 8865 "MachineIndependent/glslang_tab.cpp"
+#line 8937 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 348: /* type_specifier_nonarray: SAMPLER2D  */
-#line 2538 "MachineIndependent/glslang.y"
+  case 350: /* type_specifier_nonarray: SAMPLER2D  */
+#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);
     }
-#line 8875 "MachineIndependent/glslang_tab.cpp"
+#line 8947 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 349: /* type_specifier_nonarray: SAMPLER3D  */
-#line 2543 "MachineIndependent/glslang.y"
+  case 351: /* type_specifier_nonarray: SAMPLER3D  */
+#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, Esd3D);
     }
-#line 8885 "MachineIndependent/glslang_tab.cpp"
+#line 8957 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 350: /* type_specifier_nonarray: SAMPLERCUBE  */
-#line 2548 "MachineIndependent/glslang.y"
+  case 352: /* type_specifier_nonarray: SAMPLERCUBE  */
+#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, EsdCube);
     }
-#line 8895 "MachineIndependent/glslang_tab.cpp"
+#line 8967 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 351: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
-#line 2553 "MachineIndependent/glslang.y"
+  case 353: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
+#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, false, true);
     }
-#line 8905 "MachineIndependent/glslang_tab.cpp"
+#line 8977 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 352: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
-#line 2558 "MachineIndependent/glslang.y"
+  case 354: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
+#line 2573 "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 8915 "MachineIndependent/glslang_tab.cpp"
+#line 8987 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 353: /* type_specifier_nonarray: SAMPLER2DARRAY  */
-#line 2563 "MachineIndependent/glslang.y"
+  case 355: /* type_specifier_nonarray: SAMPLER2DARRAY  */
+#line 2578 "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 8925 "MachineIndependent/glslang_tab.cpp"
+#line 8997 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 354: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
-#line 2568 "MachineIndependent/glslang.y"
+  case 356: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
+#line 2583 "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 8935 "MachineIndependent/glslang_tab.cpp"
+#line 9007 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 355: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
-#line 2574 "MachineIndependent/glslang.y"
+  case 357: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
+#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, Esd1D, false, true);
     }
-#line 8945 "MachineIndependent/glslang_tab.cpp"
+#line 9017 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 356: /* type_specifier_nonarray: SAMPLER1DARRAY  */
-#line 2579 "MachineIndependent/glslang.y"
+  case 358: /* type_specifier_nonarray: SAMPLER1DARRAY  */
+#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, Esd1D, true);
     }
-#line 8955 "MachineIndependent/glslang_tab.cpp"
+#line 9027 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 357: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
-#line 2584 "MachineIndependent/glslang.y"
+  case 359: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
+#line 2599 "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 8965 "MachineIndependent/glslang_tab.cpp"
+#line 9037 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 358: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
-#line 2589 "MachineIndependent/glslang.y"
+  case 360: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
+#line 2604 "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 8975 "MachineIndependent/glslang_tab.cpp"
+#line 9047 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 359: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
-#line 2594 "MachineIndependent/glslang.y"
+  case 361: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
+#line 2609 "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 8985 "MachineIndependent/glslang_tab.cpp"
+#line 9057 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 360: /* type_specifier_nonarray: F16SAMPLER1D  */
-#line 2599 "MachineIndependent/glslang.y"
+  case 362: /* type_specifier_nonarray: F16SAMPLER1D  */
+#line 2614 "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 8996 "MachineIndependent/glslang_tab.cpp"
+#line 9068 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 361: /* type_specifier_nonarray: F16SAMPLER2D  */
-#line 2605 "MachineIndependent/glslang.y"
+  case 363: /* type_specifier_nonarray: F16SAMPLER2D  */
+#line 2620 "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 9007 "MachineIndependent/glslang_tab.cpp"
+#line 9079 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 362: /* type_specifier_nonarray: F16SAMPLER3D  */
-#line 2611 "MachineIndependent/glslang.y"
+  case 364: /* type_specifier_nonarray: F16SAMPLER3D  */
+#line 2626 "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 9018 "MachineIndependent/glslang_tab.cpp"
+#line 9090 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 363: /* type_specifier_nonarray: F16SAMPLERCUBE  */
-#line 2617 "MachineIndependent/glslang.y"
+  case 365: /* type_specifier_nonarray: F16SAMPLERCUBE  */
+#line 2632 "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 9029 "MachineIndependent/glslang_tab.cpp"
+#line 9101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 364: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
-#line 2623 "MachineIndependent/glslang.y"
+  case 366: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
+#line 2638 "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 9040 "MachineIndependent/glslang_tab.cpp"
+#line 9112 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 365: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
-#line 2629 "MachineIndependent/glslang.y"
+  case 367: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
+#line 2644 "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 9051 "MachineIndependent/glslang_tab.cpp"
+#line 9123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 366: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
-#line 2635 "MachineIndependent/glslang.y"
+  case 368: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
+#line 2650 "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 9062 "MachineIndependent/glslang_tab.cpp"
+#line 9134 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 367: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
-#line 2641 "MachineIndependent/glslang.y"
+  case 369: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
+#line 2656 "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 9073 "MachineIndependent/glslang_tab.cpp"
+#line 9145 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 368: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
-#line 2647 "MachineIndependent/glslang.y"
+  case 370: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
+#line 2662 "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 9084 "MachineIndependent/glslang_tab.cpp"
+#line 9156 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 369: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
-#line 2653 "MachineIndependent/glslang.y"
+  case 371: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
+#line 2668 "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 9095 "MachineIndependent/glslang_tab.cpp"
+#line 9167 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 370: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
-#line 2659 "MachineIndependent/glslang.y"
+  case 372: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
+#line 2674 "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 9106 "MachineIndependent/glslang_tab.cpp"
+#line 9178 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 371: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
-#line 2665 "MachineIndependent/glslang.y"
+  case 373: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
+#line 2680 "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 9117 "MachineIndependent/glslang_tab.cpp"
+#line 9189 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 372: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
-#line 2671 "MachineIndependent/glslang.y"
+  case 374: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
+#line 2686 "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 9128 "MachineIndependent/glslang_tab.cpp"
+#line 9200 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 373: /* type_specifier_nonarray: ISAMPLER1D  */
-#line 2677 "MachineIndependent/glslang.y"
+  case 375: /* type_specifier_nonarray: ISAMPLER1D  */
+#line 2692 "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 9138 "MachineIndependent/glslang_tab.cpp"
+#line 9210 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 374: /* type_specifier_nonarray: ISAMPLER2D  */
-#line 2683 "MachineIndependent/glslang.y"
+  case 376: /* type_specifier_nonarray: ISAMPLER2D  */
+#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);
     }
-#line 9148 "MachineIndependent/glslang_tab.cpp"
+#line 9220 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 375: /* type_specifier_nonarray: ISAMPLER3D  */
-#line 2688 "MachineIndependent/glslang.y"
+  case 377: /* type_specifier_nonarray: ISAMPLER3D  */
+#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(EbtInt, Esd3D);
     }
-#line 9158 "MachineIndependent/glslang_tab.cpp"
+#line 9230 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 376: /* type_specifier_nonarray: ISAMPLERCUBE  */
-#line 2693 "MachineIndependent/glslang.y"
+  case 378: /* type_specifier_nonarray: ISAMPLERCUBE  */
+#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(EbtInt, EsdCube);
     }
-#line 9168 "MachineIndependent/glslang_tab.cpp"
+#line 9240 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 377: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
-#line 2698 "MachineIndependent/glslang.y"
+  case 379: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
+#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(EbtInt, Esd2D, true);
     }
-#line 9178 "MachineIndependent/glslang_tab.cpp"
+#line 9250 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 378: /* type_specifier_nonarray: USAMPLER2D  */
-#line 2703 "MachineIndependent/glslang.y"
+  case 380: /* type_specifier_nonarray: USAMPLER2D  */
+#line 2718 "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 9188 "MachineIndependent/glslang_tab.cpp"
+#line 9260 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 379: /* type_specifier_nonarray: USAMPLER3D  */
-#line 2708 "MachineIndependent/glslang.y"
+  case 381: /* type_specifier_nonarray: USAMPLER3D  */
+#line 2723 "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 9198 "MachineIndependent/glslang_tab.cpp"
+#line 9270 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 380: /* type_specifier_nonarray: USAMPLERCUBE  */
-#line 2713 "MachineIndependent/glslang.y"
+  case 382: /* type_specifier_nonarray: USAMPLERCUBE  */
+#line 2728 "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 9208 "MachineIndependent/glslang_tab.cpp"
+#line 9280 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 381: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
-#line 2719 "MachineIndependent/glslang.y"
+  case 383: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
+#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(EbtInt, Esd1D, true);
     }
-#line 9218 "MachineIndependent/glslang_tab.cpp"
+#line 9290 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 382: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
-#line 2724 "MachineIndependent/glslang.y"
+  case 384: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
+#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(EbtInt, EsdCube, true);
     }
-#line 9228 "MachineIndependent/glslang_tab.cpp"
+#line 9300 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 383: /* type_specifier_nonarray: USAMPLER1D  */
-#line 2729 "MachineIndependent/glslang.y"
+  case 385: /* type_specifier_nonarray: USAMPLER1D  */
+#line 2744 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 9238 "MachineIndependent/glslang_tab.cpp"
+#line 9310 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 384: /* type_specifier_nonarray: USAMPLER1DARRAY  */
-#line 2734 "MachineIndependent/glslang.y"
+  case 386: /* type_specifier_nonarray: USAMPLER1DARRAY  */
+#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.set(EbtUint, Esd1D, true);
     }
-#line 9248 "MachineIndependent/glslang_tab.cpp"
+#line 9320 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 385: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
-#line 2739 "MachineIndependent/glslang.y"
+  case 387: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
+#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.set(EbtUint, EsdCube, true);
     }
-#line 9258 "MachineIndependent/glslang_tab.cpp"
+#line 9330 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 386: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
-#line 2744 "MachineIndependent/glslang.y"
+  case 388: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
+#line 2759 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 9268 "MachineIndependent/glslang_tab.cpp"
+#line 9340 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 387: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
-#line 2749 "MachineIndependent/glslang.y"
+  case 389: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
+#line 2764 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 9278 "MachineIndependent/glslang_tab.cpp"
+#line 9350 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 388: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
-#line 2754 "MachineIndependent/glslang.y"
+  case 390: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
+#line 2769 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 9288 "MachineIndependent/glslang_tab.cpp"
+#line 9360 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 389: /* type_specifier_nonarray: USAMPLER2DARRAY  */
-#line 2760 "MachineIndependent/glslang.y"
+  case 391: /* type_specifier_nonarray: USAMPLER2DARRAY  */
+#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.set(EbtUint, Esd2D, true);
     }
-#line 9298 "MachineIndependent/glslang_tab.cpp"
+#line 9370 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 390: /* type_specifier_nonarray: TEXTURE2D  */
-#line 2765 "MachineIndependent/glslang.y"
+  case 392: /* type_specifier_nonarray: TEXTURE2D  */
+#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, Esd2D);
     }
-#line 9308 "MachineIndependent/glslang_tab.cpp"
+#line 9380 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 391: /* type_specifier_nonarray: TEXTURE3D  */
-#line 2770 "MachineIndependent/glslang.y"
+  case 393: /* type_specifier_nonarray: TEXTURE3D  */
+#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(EbtFloat, Esd3D);
     }
-#line 9318 "MachineIndependent/glslang_tab.cpp"
+#line 9390 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 392: /* type_specifier_nonarray: TEXTURE2DARRAY  */
-#line 2775 "MachineIndependent/glslang.y"
+  case 394: /* type_specifier_nonarray: TEXTURE2DARRAY  */
+#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(EbtFloat, Esd2D, true);
     }
-#line 9328 "MachineIndependent/glslang_tab.cpp"
+#line 9400 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 393: /* type_specifier_nonarray: TEXTURECUBE  */
-#line 2780 "MachineIndependent/glslang.y"
+  case 395: /* type_specifier_nonarray: TEXTURECUBE  */
+#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(EbtFloat, EsdCube);
     }
-#line 9338 "MachineIndependent/glslang_tab.cpp"
+#line 9410 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 394: /* type_specifier_nonarray: ITEXTURE2D  */
-#line 2785 "MachineIndependent/glslang.y"
+  case 396: /* type_specifier_nonarray: ITEXTURE2D  */
+#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);
     }
-#line 9348 "MachineIndependent/glslang_tab.cpp"
+#line 9420 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 395: /* type_specifier_nonarray: ITEXTURE3D  */
-#line 2790 "MachineIndependent/glslang.y"
+  case 397: /* type_specifier_nonarray: ITEXTURE3D  */
+#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(EbtInt, Esd3D);
     }
-#line 9358 "MachineIndependent/glslang_tab.cpp"
+#line 9430 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 396: /* type_specifier_nonarray: ITEXTURECUBE  */
-#line 2795 "MachineIndependent/glslang.y"
+  case 398: /* type_specifier_nonarray: ITEXTURECUBE  */
+#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(EbtInt, EsdCube);
     }
-#line 9368 "MachineIndependent/glslang_tab.cpp"
+#line 9440 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 397: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
-#line 2800 "MachineIndependent/glslang.y"
+  case 399: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
+#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(EbtInt, Esd2D, true);
     }
-#line 9378 "MachineIndependent/glslang_tab.cpp"
+#line 9450 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 398: /* type_specifier_nonarray: UTEXTURE2D  */
-#line 2805 "MachineIndependent/glslang.y"
+  case 400: /* type_specifier_nonarray: UTEXTURE2D  */
+#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);
     }
-#line 9388 "MachineIndependent/glslang_tab.cpp"
+#line 9460 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 399: /* type_specifier_nonarray: UTEXTURE3D  */
-#line 2810 "MachineIndependent/glslang.y"
+  case 401: /* type_specifier_nonarray: UTEXTURE3D  */
+#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.setTexture(EbtUint, Esd3D);
     }
-#line 9398 "MachineIndependent/glslang_tab.cpp"
+#line 9470 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 400: /* type_specifier_nonarray: UTEXTURECUBE  */
-#line 2815 "MachineIndependent/glslang.y"
+  case 402: /* type_specifier_nonarray: UTEXTURECUBE  */
+#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.setTexture(EbtUint, EsdCube);
     }
-#line 9408 "MachineIndependent/glslang_tab.cpp"
+#line 9480 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 401: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
-#line 2820 "MachineIndependent/glslang.y"
+  case 403: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
+#line 2835 "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 9418 "MachineIndependent/glslang_tab.cpp"
+#line 9490 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 402: /* type_specifier_nonarray: SAMPLER  */
-#line 2825 "MachineIndependent/glslang.y"
+  case 404: /* type_specifier_nonarray: SAMPLER  */
+#line 2840 "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 9428 "MachineIndependent/glslang_tab.cpp"
+#line 9500 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 403: /* type_specifier_nonarray: SAMPLERSHADOW  */
-#line 2830 "MachineIndependent/glslang.y"
+  case 405: /* type_specifier_nonarray: SAMPLERSHADOW  */
+#line 2845 "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 9438 "MachineIndependent/glslang_tab.cpp"
+#line 9510 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 404: /* type_specifier_nonarray: SAMPLER2DRECT  */
-#line 2836 "MachineIndependent/glslang.y"
+  case 406: /* type_specifier_nonarray: SAMPLER2DRECT  */
+#line 2851 "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 9448 "MachineIndependent/glslang_tab.cpp"
+#line 9520 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 405: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
-#line 2841 "MachineIndependent/glslang.y"
+  case 407: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
+#line 2856 "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 9458 "MachineIndependent/glslang_tab.cpp"
+#line 9530 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 406: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
-#line 2846 "MachineIndependent/glslang.y"
+  case 408: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
+#line 2861 "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 9469 "MachineIndependent/glslang_tab.cpp"
+#line 9541 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 407: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
-#line 2852 "MachineIndependent/glslang.y"
+  case 409: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
+#line 2867 "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 9480 "MachineIndependent/glslang_tab.cpp"
+#line 9552 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 408: /* type_specifier_nonarray: ISAMPLER2DRECT  */
-#line 2858 "MachineIndependent/glslang.y"
+  case 410: /* type_specifier_nonarray: ISAMPLER2DRECT  */
+#line 2873 "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 9490 "MachineIndependent/glslang_tab.cpp"
+#line 9562 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 409: /* type_specifier_nonarray: USAMPLER2DRECT  */
-#line 2863 "MachineIndependent/glslang.y"
+  case 411: /* type_specifier_nonarray: USAMPLER2DRECT  */
+#line 2878 "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 9500 "MachineIndependent/glslang_tab.cpp"
+#line 9572 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 410: /* type_specifier_nonarray: SAMPLERBUFFER  */
-#line 2868 "MachineIndependent/glslang.y"
+  case 412: /* type_specifier_nonarray: SAMPLERBUFFER  */
+#line 2883 "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 9510 "MachineIndependent/glslang_tab.cpp"
+#line 9582 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 411: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
-#line 2873 "MachineIndependent/glslang.y"
+  case 413: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
+#line 2888 "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 9521 "MachineIndependent/glslang_tab.cpp"
+#line 9593 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 412: /* type_specifier_nonarray: ISAMPLERBUFFER  */
-#line 2879 "MachineIndependent/glslang.y"
+  case 414: /* type_specifier_nonarray: ISAMPLERBUFFER  */
+#line 2894 "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 9531 "MachineIndependent/glslang_tab.cpp"
+#line 9603 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 413: /* type_specifier_nonarray: USAMPLERBUFFER  */
-#line 2884 "MachineIndependent/glslang.y"
+  case 415: /* type_specifier_nonarray: USAMPLERBUFFER  */
+#line 2899 "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 9541 "MachineIndependent/glslang_tab.cpp"
+#line 9613 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 414: /* type_specifier_nonarray: SAMPLER2DMS  */
-#line 2889 "MachineIndependent/glslang.y"
+  case 416: /* type_specifier_nonarray: SAMPLER2DMS  */
+#line 2904 "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 9551 "MachineIndependent/glslang_tab.cpp"
+#line 9623 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 415: /* type_specifier_nonarray: F16SAMPLER2DMS  */
-#line 2894 "MachineIndependent/glslang.y"
+  case 417: /* type_specifier_nonarray: F16SAMPLER2DMS  */
+#line 2909 "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 9562 "MachineIndependent/glslang_tab.cpp"
+#line 9634 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 416: /* type_specifier_nonarray: ISAMPLER2DMS  */
-#line 2900 "MachineIndependent/glslang.y"
+  case 418: /* type_specifier_nonarray: ISAMPLER2DMS  */
+#line 2915 "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 9572 "MachineIndependent/glslang_tab.cpp"
+#line 9644 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 417: /* type_specifier_nonarray: USAMPLER2DMS  */
-#line 2905 "MachineIndependent/glslang.y"
+  case 419: /* type_specifier_nonarray: USAMPLER2DMS  */
+#line 2920 "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 9582 "MachineIndependent/glslang_tab.cpp"
+#line 9654 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 418: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
-#line 2910 "MachineIndependent/glslang.y"
+  case 420: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
+#line 2925 "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 9592 "MachineIndependent/glslang_tab.cpp"
+#line 9664 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 419: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
-#line 2915 "MachineIndependent/glslang.y"
+  case 421: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
+#line 2930 "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 9603 "MachineIndependent/glslang_tab.cpp"
+#line 9675 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 420: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
-#line 2921 "MachineIndependent/glslang.y"
+  case 422: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
+#line 2936 "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 9613 "MachineIndependent/glslang_tab.cpp"
+#line 9685 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 421: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
-#line 2926 "MachineIndependent/glslang.y"
+  case 423: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
+#line 2941 "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 9623 "MachineIndependent/glslang_tab.cpp"
+#line 9695 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 422: /* type_specifier_nonarray: TEXTURE1D  */
-#line 2931 "MachineIndependent/glslang.y"
+  case 424: /* type_specifier_nonarray: TEXTURE1D  */
+#line 2946 "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 9633 "MachineIndependent/glslang_tab.cpp"
+#line 9705 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 423: /* type_specifier_nonarray: F16TEXTURE1D  */
-#line 2936 "MachineIndependent/glslang.y"
+  case 425: /* type_specifier_nonarray: F16TEXTURE1D  */
+#line 2951 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
     }
-#line 9644 "MachineIndependent/glslang_tab.cpp"
+#line 9716 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 424: /* type_specifier_nonarray: F16TEXTURE2D  */
-#line 2942 "MachineIndependent/glslang.y"
+  case 426: /* type_specifier_nonarray: F16TEXTURE2D  */
+#line 2957 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
     }
-#line 9655 "MachineIndependent/glslang_tab.cpp"
+#line 9727 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 425: /* type_specifier_nonarray: F16TEXTURE3D  */
-#line 2948 "MachineIndependent/glslang.y"
+  case 427: /* type_specifier_nonarray: F16TEXTURE3D  */
+#line 2963 "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 9666 "MachineIndependent/glslang_tab.cpp"
+#line 9738 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 426: /* type_specifier_nonarray: F16TEXTURECUBE  */
-#line 2954 "MachineIndependent/glslang.y"
+  case 428: /* type_specifier_nonarray: F16TEXTURECUBE  */
+#line 2969 "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 9677 "MachineIndependent/glslang_tab.cpp"
+#line 9749 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 427: /* type_specifier_nonarray: TEXTURE1DARRAY  */
-#line 2960 "MachineIndependent/glslang.y"
+  case 429: /* type_specifier_nonarray: TEXTURE1DARRAY  */
+#line 2975 "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 9687 "MachineIndependent/glslang_tab.cpp"
+#line 9759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 428: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
-#line 2965 "MachineIndependent/glslang.y"
+  case 430: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
+#line 2980 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
     }
-#line 9698 "MachineIndependent/glslang_tab.cpp"
+#line 9770 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 429: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
-#line 2971 "MachineIndependent/glslang.y"
+  case 431: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
+#line 2986 "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 9709 "MachineIndependent/glslang_tab.cpp"
+#line 9781 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 430: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
-#line 2977 "MachineIndependent/glslang.y"
+  case 432: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
+#line 2992 "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 9720 "MachineIndependent/glslang_tab.cpp"
+#line 9792 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 431: /* type_specifier_nonarray: ITEXTURE1D  */
-#line 2983 "MachineIndependent/glslang.y"
+  case 433: /* type_specifier_nonarray: ITEXTURE1D  */
+#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(EbtInt, Esd1D);
     }
-#line 9730 "MachineIndependent/glslang_tab.cpp"
+#line 9802 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 432: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
-#line 2988 "MachineIndependent/glslang.y"
+  case 434: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
+#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(EbtInt, Esd1D, true);
     }
-#line 9740 "MachineIndependent/glslang_tab.cpp"
+#line 9812 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 433: /* type_specifier_nonarray: UTEXTURE1D  */
-#line 2993 "MachineIndependent/glslang.y"
+  case 435: /* type_specifier_nonarray: UTEXTURE1D  */
+#line 3008 "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 9750 "MachineIndependent/glslang_tab.cpp"
+#line 9822 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 434: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
-#line 2998 "MachineIndependent/glslang.y"
+  case 436: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
+#line 3013 "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 9760 "MachineIndependent/glslang_tab.cpp"
+#line 9832 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 435: /* type_specifier_nonarray: TEXTURE2DRECT  */
-#line 3003 "MachineIndependent/glslang.y"
+  case 437: /* type_specifier_nonarray: TEXTURE2DRECT  */
+#line 3018 "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 9770 "MachineIndependent/glslang_tab.cpp"
+#line 9842 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 436: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
-#line 3008 "MachineIndependent/glslang.y"
+  case 438: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
+#line 3023 "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 9781 "MachineIndependent/glslang_tab.cpp"
+#line 9853 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 437: /* type_specifier_nonarray: ITEXTURE2DRECT  */
-#line 3014 "MachineIndependent/glslang.y"
+  case 439: /* type_specifier_nonarray: ITEXTURE2DRECT  */
+#line 3029 "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 9791 "MachineIndependent/glslang_tab.cpp"
+#line 9863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 438: /* type_specifier_nonarray: UTEXTURE2DRECT  */
-#line 3019 "MachineIndependent/glslang.y"
+  case 440: /* type_specifier_nonarray: UTEXTURE2DRECT  */
+#line 3034 "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 9801 "MachineIndependent/glslang_tab.cpp"
+#line 9873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 439: /* type_specifier_nonarray: TEXTUREBUFFER  */
-#line 3024 "MachineIndependent/glslang.y"
+  case 441: /* type_specifier_nonarray: TEXTUREBUFFER  */
+#line 3039 "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 9811 "MachineIndependent/glslang_tab.cpp"
+#line 9883 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 440: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
-#line 3029 "MachineIndependent/glslang.y"
+  case 442: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
+#line 3044 "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 9822 "MachineIndependent/glslang_tab.cpp"
+#line 9894 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 441: /* type_specifier_nonarray: ITEXTUREBUFFER  */
-#line 3035 "MachineIndependent/glslang.y"
+  case 443: /* type_specifier_nonarray: ITEXTUREBUFFER  */
+#line 3050 "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 9832 "MachineIndependent/glslang_tab.cpp"
+#line 9904 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 442: /* type_specifier_nonarray: UTEXTUREBUFFER  */
-#line 3040 "MachineIndependent/glslang.y"
+  case 444: /* type_specifier_nonarray: UTEXTUREBUFFER  */
+#line 3055 "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 9842 "MachineIndependent/glslang_tab.cpp"
+#line 9914 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 443: /* type_specifier_nonarray: TEXTURE2DMS  */
-#line 3045 "MachineIndependent/glslang.y"
+  case 445: /* type_specifier_nonarray: TEXTURE2DMS  */
+#line 3060 "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 9852 "MachineIndependent/glslang_tab.cpp"
+#line 9924 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 444: /* type_specifier_nonarray: F16TEXTURE2DMS  */
-#line 3050 "MachineIndependent/glslang.y"
+  case 446: /* type_specifier_nonarray: F16TEXTURE2DMS  */
+#line 3065 "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 9863 "MachineIndependent/glslang_tab.cpp"
+#line 9935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 445: /* type_specifier_nonarray: ITEXTURE2DMS  */
-#line 3056 "MachineIndependent/glslang.y"
+  case 447: /* type_specifier_nonarray: ITEXTURE2DMS  */
+#line 3071 "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 9873 "MachineIndependent/glslang_tab.cpp"
+#line 9945 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 446: /* type_specifier_nonarray: UTEXTURE2DMS  */
-#line 3061 "MachineIndependent/glslang.y"
+  case 448: /* type_specifier_nonarray: UTEXTURE2DMS  */
+#line 3076 "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 9883 "MachineIndependent/glslang_tab.cpp"
+#line 9955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 447: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
-#line 3066 "MachineIndependent/glslang.y"
+  case 449: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
+#line 3081 "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 9893 "MachineIndependent/glslang_tab.cpp"
+#line 9965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 448: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
-#line 3071 "MachineIndependent/glslang.y"
+  case 450: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
+#line 3086 "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 9904 "MachineIndependent/glslang_tab.cpp"
+#line 9976 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 449: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
-#line 3077 "MachineIndependent/glslang.y"
+  case 451: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
+#line 3092 "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 9914 "MachineIndependent/glslang_tab.cpp"
+#line 9986 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 450: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
-#line 3082 "MachineIndependent/glslang.y"
+  case 452: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
+#line 3097 "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 9924 "MachineIndependent/glslang_tab.cpp"
+#line 9996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 451: /* type_specifier_nonarray: IMAGE1D  */
-#line 3087 "MachineIndependent/glslang.y"
+  case 453: /* type_specifier_nonarray: IMAGE1D  */
+#line 3102 "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 9934 "MachineIndependent/glslang_tab.cpp"
+#line 10006 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 452: /* type_specifier_nonarray: F16IMAGE1D  */
-#line 3092 "MachineIndependent/glslang.y"
+  case 454: /* type_specifier_nonarray: F16IMAGE1D  */
+#line 3107 "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 9945 "MachineIndependent/glslang_tab.cpp"
+#line 10017 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 453: /* type_specifier_nonarray: IIMAGE1D  */
-#line 3098 "MachineIndependent/glslang.y"
+  case 455: /* type_specifier_nonarray: IIMAGE1D  */
+#line 3113 "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 9955 "MachineIndependent/glslang_tab.cpp"
+#line 10027 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 454: /* type_specifier_nonarray: UIMAGE1D  */
-#line 3103 "MachineIndependent/glslang.y"
+  case 456: /* type_specifier_nonarray: UIMAGE1D  */
+#line 3118 "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 9965 "MachineIndependent/glslang_tab.cpp"
+#line 10037 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 455: /* type_specifier_nonarray: IMAGE2D  */
-#line 3108 "MachineIndependent/glslang.y"
+  case 457: /* type_specifier_nonarray: IMAGE2D  */
+#line 3123 "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 9975 "MachineIndependent/glslang_tab.cpp"
+#line 10047 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 456: /* type_specifier_nonarray: F16IMAGE2D  */
-#line 3113 "MachineIndependent/glslang.y"
+  case 458: /* type_specifier_nonarray: F16IMAGE2D  */
+#line 3128 "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 9986 "MachineIndependent/glslang_tab.cpp"
+#line 10058 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 457: /* type_specifier_nonarray: IIMAGE2D  */
-#line 3119 "MachineIndependent/glslang.y"
+  case 459: /* type_specifier_nonarray: IIMAGE2D  */
+#line 3134 "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 9996 "MachineIndependent/glslang_tab.cpp"
+#line 10068 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 458: /* type_specifier_nonarray: UIMAGE2D  */
-#line 3124 "MachineIndependent/glslang.y"
+  case 460: /* type_specifier_nonarray: UIMAGE2D  */
+#line 3139 "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 10006 "MachineIndependent/glslang_tab.cpp"
+#line 10078 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 459: /* type_specifier_nonarray: IMAGE3D  */
-#line 3129 "MachineIndependent/glslang.y"
+  case 461: /* type_specifier_nonarray: IMAGE3D  */
+#line 3144 "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 10016 "MachineIndependent/glslang_tab.cpp"
+#line 10088 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 460: /* type_specifier_nonarray: F16IMAGE3D  */
-#line 3134 "MachineIndependent/glslang.y"
+  case 462: /* type_specifier_nonarray: F16IMAGE3D  */
+#line 3149 "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 10027 "MachineIndependent/glslang_tab.cpp"
+#line 10099 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 461: /* type_specifier_nonarray: IIMAGE3D  */
-#line 3140 "MachineIndependent/glslang.y"
+  case 463: /* type_specifier_nonarray: IIMAGE3D  */
+#line 3155 "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 10037 "MachineIndependent/glslang_tab.cpp"
+#line 10109 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 462: /* type_specifier_nonarray: UIMAGE3D  */
-#line 3145 "MachineIndependent/glslang.y"
+  case 464: /* type_specifier_nonarray: UIMAGE3D  */
+#line 3160 "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 10047 "MachineIndependent/glslang_tab.cpp"
+#line 10119 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 463: /* type_specifier_nonarray: IMAGE2DRECT  */
-#line 3150 "MachineIndependent/glslang.y"
+  case 465: /* type_specifier_nonarray: IMAGE2DRECT  */
+#line 3165 "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 10057 "MachineIndependent/glslang_tab.cpp"
+#line 10129 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 464: /* type_specifier_nonarray: F16IMAGE2DRECT  */
-#line 3155 "MachineIndependent/glslang.y"
+  case 466: /* type_specifier_nonarray: F16IMAGE2DRECT  */
+#line 3170 "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 10068 "MachineIndependent/glslang_tab.cpp"
+#line 10140 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 465: /* type_specifier_nonarray: IIMAGE2DRECT  */
-#line 3161 "MachineIndependent/glslang.y"
+  case 467: /* type_specifier_nonarray: IIMAGE2DRECT  */
+#line 3176 "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 10078 "MachineIndependent/glslang_tab.cpp"
+#line 10150 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 466: /* type_specifier_nonarray: UIMAGE2DRECT  */
-#line 3166 "MachineIndependent/glslang.y"
+  case 468: /* type_specifier_nonarray: UIMAGE2DRECT  */
+#line 3181 "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 10088 "MachineIndependent/glslang_tab.cpp"
+#line 10160 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 467: /* type_specifier_nonarray: IMAGECUBE  */
-#line 3171 "MachineIndependent/glslang.y"
+  case 469: /* type_specifier_nonarray: IMAGECUBE  */
+#line 3186 "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 10098 "MachineIndependent/glslang_tab.cpp"
+#line 10170 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 468: /* type_specifier_nonarray: F16IMAGECUBE  */
-#line 3176 "MachineIndependent/glslang.y"
+  case 470: /* type_specifier_nonarray: F16IMAGECUBE  */
+#line 3191 "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 10109 "MachineIndependent/glslang_tab.cpp"
+#line 10181 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 469: /* type_specifier_nonarray: IIMAGECUBE  */
-#line 3182 "MachineIndependent/glslang.y"
+  case 471: /* type_specifier_nonarray: IIMAGECUBE  */
+#line 3197 "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 10119 "MachineIndependent/glslang_tab.cpp"
+#line 10191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 470: /* type_specifier_nonarray: UIMAGECUBE  */
-#line 3187 "MachineIndependent/glslang.y"
+  case 472: /* type_specifier_nonarray: UIMAGECUBE  */
+#line 3202 "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 10129 "MachineIndependent/glslang_tab.cpp"
+#line 10201 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 471: /* type_specifier_nonarray: IMAGEBUFFER  */
-#line 3192 "MachineIndependent/glslang.y"
+  case 473: /* type_specifier_nonarray: IMAGEBUFFER  */
+#line 3207 "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 10139 "MachineIndependent/glslang_tab.cpp"
+#line 10211 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 472: /* type_specifier_nonarray: F16IMAGEBUFFER  */
-#line 3197 "MachineIndependent/glslang.y"
+  case 474: /* type_specifier_nonarray: F16IMAGEBUFFER  */
+#line 3212 "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 10150 "MachineIndependent/glslang_tab.cpp"
+#line 10222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 473: /* type_specifier_nonarray: IIMAGEBUFFER  */
-#line 3203 "MachineIndependent/glslang.y"
+  case 475: /* type_specifier_nonarray: IIMAGEBUFFER  */
+#line 3218 "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 10160 "MachineIndependent/glslang_tab.cpp"
+#line 10232 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 474: /* type_specifier_nonarray: UIMAGEBUFFER  */
-#line 3208 "MachineIndependent/glslang.y"
+  case 476: /* type_specifier_nonarray: UIMAGEBUFFER  */
+#line 3223 "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 10170 "MachineIndependent/glslang_tab.cpp"
+#line 10242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 475: /* type_specifier_nonarray: IMAGE1DARRAY  */
-#line 3213 "MachineIndependent/glslang.y"
+  case 477: /* type_specifier_nonarray: IMAGE1DARRAY  */
+#line 3228 "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 10180 "MachineIndependent/glslang_tab.cpp"
+#line 10252 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 476: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
-#line 3218 "MachineIndependent/glslang.y"
+  case 478: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
+#line 3233 "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 10191 "MachineIndependent/glslang_tab.cpp"
+#line 10263 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 477: /* type_specifier_nonarray: IIMAGE1DARRAY  */
-#line 3224 "MachineIndependent/glslang.y"
+  case 479: /* type_specifier_nonarray: IIMAGE1DARRAY  */
+#line 3239 "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 10201 "MachineIndependent/glslang_tab.cpp"
+#line 10273 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 478: /* type_specifier_nonarray: UIMAGE1DARRAY  */
-#line 3229 "MachineIndependent/glslang.y"
+  case 480: /* type_specifier_nonarray: UIMAGE1DARRAY  */
+#line 3244 "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 10211 "MachineIndependent/glslang_tab.cpp"
+#line 10283 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 479: /* type_specifier_nonarray: IMAGE2DARRAY  */
-#line 3234 "MachineIndependent/glslang.y"
+  case 481: /* type_specifier_nonarray: IMAGE2DARRAY  */
+#line 3249 "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 10221 "MachineIndependent/glslang_tab.cpp"
+#line 10293 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 480: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
-#line 3239 "MachineIndependent/glslang.y"
+  case 482: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
+#line 3254 "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 10232 "MachineIndependent/glslang_tab.cpp"
+#line 10304 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 481: /* type_specifier_nonarray: IIMAGE2DARRAY  */
-#line 3245 "MachineIndependent/glslang.y"
+  case 483: /* type_specifier_nonarray: IIMAGE2DARRAY  */
+#line 3260 "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 10242 "MachineIndependent/glslang_tab.cpp"
+#line 10314 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 482: /* type_specifier_nonarray: UIMAGE2DARRAY  */
-#line 3250 "MachineIndependent/glslang.y"
+  case 484: /* type_specifier_nonarray: UIMAGE2DARRAY  */
+#line 3265 "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 10252 "MachineIndependent/glslang_tab.cpp"
+#line 10324 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 483: /* type_specifier_nonarray: IMAGECUBEARRAY  */
-#line 3255 "MachineIndependent/glslang.y"
+  case 485: /* type_specifier_nonarray: IMAGECUBEARRAY  */
+#line 3270 "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 10262 "MachineIndependent/glslang_tab.cpp"
+#line 10334 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 484: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
-#line 3260 "MachineIndependent/glslang.y"
+  case 486: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
+#line 3275 "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 10273 "MachineIndependent/glslang_tab.cpp"
+#line 10345 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 485: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
-#line 3266 "MachineIndependent/glslang.y"
+  case 487: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
+#line 3281 "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 10283 "MachineIndependent/glslang_tab.cpp"
+#line 10355 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 486: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
-#line 3271 "MachineIndependent/glslang.y"
+  case 488: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
+#line 3286 "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 10293 "MachineIndependent/glslang_tab.cpp"
+#line 10365 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 487: /* type_specifier_nonarray: IMAGE2DMS  */
-#line 3276 "MachineIndependent/glslang.y"
+  case 489: /* type_specifier_nonarray: IMAGE2DMS  */
+#line 3291 "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 10303 "MachineIndependent/glslang_tab.cpp"
+#line 10375 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 488: /* type_specifier_nonarray: F16IMAGE2DMS  */
-#line 3281 "MachineIndependent/glslang.y"
+  case 490: /* type_specifier_nonarray: F16IMAGE2DMS  */
+#line 3296 "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 10314 "MachineIndependent/glslang_tab.cpp"
+#line 10386 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 489: /* type_specifier_nonarray: IIMAGE2DMS  */
-#line 3287 "MachineIndependent/glslang.y"
+  case 491: /* type_specifier_nonarray: IIMAGE2DMS  */
+#line 3302 "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 10324 "MachineIndependent/glslang_tab.cpp"
+#line 10396 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 490: /* type_specifier_nonarray: UIMAGE2DMS  */
-#line 3292 "MachineIndependent/glslang.y"
+  case 492: /* type_specifier_nonarray: UIMAGE2DMS  */
+#line 3307 "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 10334 "MachineIndependent/glslang_tab.cpp"
+#line 10406 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 491: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
-#line 3297 "MachineIndependent/glslang.y"
+  case 493: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
+#line 3312 "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 10344 "MachineIndependent/glslang_tab.cpp"
+#line 10416 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 492: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
-#line 3302 "MachineIndependent/glslang.y"
+  case 494: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
+#line 3317 "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 10355 "MachineIndependent/glslang_tab.cpp"
+#line 10427 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 493: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
-#line 3308 "MachineIndependent/glslang.y"
+  case 495: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
+#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(EbtInt, Esd2D, true, false, true);
     }
-#line 10365 "MachineIndependent/glslang_tab.cpp"
+#line 10437 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 494: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
-#line 3313 "MachineIndependent/glslang.y"
+  case 496: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
+#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(EbtUint, Esd2D, true, false, true);
     }
-#line 10375 "MachineIndependent/glslang_tab.cpp"
+#line 10447 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 495: /* type_specifier_nonarray: I64IMAGE1D  */
-#line 3318 "MachineIndependent/glslang.y"
+  case 497: /* type_specifier_nonarray: I64IMAGE1D  */
+#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(EbtInt64, Esd1D);
     }
-#line 10385 "MachineIndependent/glslang_tab.cpp"
+#line 10457 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 496: /* type_specifier_nonarray: U64IMAGE1D  */
-#line 3323 "MachineIndependent/glslang.y"
+  case 498: /* type_specifier_nonarray: U64IMAGE1D  */
+#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(EbtUint64, Esd1D);
     }
-#line 10395 "MachineIndependent/glslang_tab.cpp"
+#line 10467 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 497: /* type_specifier_nonarray: I64IMAGE2D  */
-#line 3328 "MachineIndependent/glslang.y"
+  case 499: /* type_specifier_nonarray: I64IMAGE2D  */
+#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(EbtInt64, Esd2D);
     }
-#line 10405 "MachineIndependent/glslang_tab.cpp"
+#line 10477 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 498: /* type_specifier_nonarray: U64IMAGE2D  */
-#line 3333 "MachineIndependent/glslang.y"
+  case 500: /* type_specifier_nonarray: U64IMAGE2D  */
+#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(EbtUint64, Esd2D);
     }
-#line 10415 "MachineIndependent/glslang_tab.cpp"
+#line 10487 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 499: /* type_specifier_nonarray: I64IMAGE3D  */
-#line 3338 "MachineIndependent/glslang.y"
+  case 501: /* type_specifier_nonarray: I64IMAGE3D  */
+#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(EbtInt64, Esd3D);
     }
-#line 10425 "MachineIndependent/glslang_tab.cpp"
+#line 10497 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 500: /* type_specifier_nonarray: U64IMAGE3D  */
-#line 3343 "MachineIndependent/glslang.y"
+  case 502: /* type_specifier_nonarray: U64IMAGE3D  */
+#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(EbtUint64, Esd3D);
     }
-#line 10435 "MachineIndependent/glslang_tab.cpp"
+#line 10507 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 501: /* type_specifier_nonarray: I64IMAGE2DRECT  */
-#line 3348 "MachineIndependent/glslang.y"
+  case 503: /* type_specifier_nonarray: I64IMAGE2DRECT  */
+#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(EbtInt64, EsdRect);
     }
-#line 10445 "MachineIndependent/glslang_tab.cpp"
+#line 10517 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 502: /* type_specifier_nonarray: U64IMAGE2DRECT  */
-#line 3353 "MachineIndependent/glslang.y"
+  case 504: /* type_specifier_nonarray: U64IMAGE2DRECT  */
+#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(EbtUint64, EsdRect);
     }
-#line 10455 "MachineIndependent/glslang_tab.cpp"
+#line 10527 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 503: /* type_specifier_nonarray: I64IMAGECUBE  */
-#line 3358 "MachineIndependent/glslang.y"
+  case 505: /* type_specifier_nonarray: I64IMAGECUBE  */
+#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(EbtInt64, EsdCube);
     }
-#line 10465 "MachineIndependent/glslang_tab.cpp"
+#line 10537 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 504: /* type_specifier_nonarray: U64IMAGECUBE  */
-#line 3363 "MachineIndependent/glslang.y"
+  case 506: /* type_specifier_nonarray: U64IMAGECUBE  */
+#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(EbtUint64, EsdCube);
     }
-#line 10475 "MachineIndependent/glslang_tab.cpp"
+#line 10547 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 505: /* type_specifier_nonarray: I64IMAGEBUFFER  */
-#line 3368 "MachineIndependent/glslang.y"
+  case 507: /* type_specifier_nonarray: I64IMAGEBUFFER  */
+#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(EbtInt64, EsdBuffer);
     }
-#line 10485 "MachineIndependent/glslang_tab.cpp"
+#line 10557 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 506: /* type_specifier_nonarray: U64IMAGEBUFFER  */
-#line 3373 "MachineIndependent/glslang.y"
+  case 508: /* type_specifier_nonarray: U64IMAGEBUFFER  */
+#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(EbtUint64, EsdBuffer);
     }
-#line 10495 "MachineIndependent/glslang_tab.cpp"
+#line 10567 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 507: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
-#line 3378 "MachineIndependent/glslang.y"
+  case 509: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
+#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(EbtInt64, Esd1D, true);
     }
-#line 10505 "MachineIndependent/glslang_tab.cpp"
+#line 10577 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 508: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
-#line 3383 "MachineIndependent/glslang.y"
+  case 510: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
+#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(EbtUint64, Esd1D, true);
     }
-#line 10515 "MachineIndependent/glslang_tab.cpp"
+#line 10587 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 509: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
-#line 3388 "MachineIndependent/glslang.y"
+  case 511: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
+#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(EbtInt64, Esd2D, true);
     }
-#line 10525 "MachineIndependent/glslang_tab.cpp"
+#line 10597 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 510: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
-#line 3393 "MachineIndependent/glslang.y"
+  case 512: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
+#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(EbtUint64, Esd2D, true);
     }
-#line 10535 "MachineIndependent/glslang_tab.cpp"
+#line 10607 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 511: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
-#line 3398 "MachineIndependent/glslang.y"
+  case 513: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
+#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(EbtInt64, EsdCube, true);
     }
-#line 10545 "MachineIndependent/glslang_tab.cpp"
+#line 10617 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 512: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
-#line 3403 "MachineIndependent/glslang.y"
+  case 514: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
+#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(EbtUint64, EsdCube, true);
     }
-#line 10555 "MachineIndependent/glslang_tab.cpp"
+#line 10627 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 513: /* type_specifier_nonarray: I64IMAGE2DMS  */
-#line 3408 "MachineIndependent/glslang.y"
+  case 515: /* type_specifier_nonarray: I64IMAGE2DMS  */
+#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(EbtInt64, Esd2D, false, false, true);
     }
-#line 10565 "MachineIndependent/glslang_tab.cpp"
+#line 10637 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 514: /* type_specifier_nonarray: U64IMAGE2DMS  */
-#line 3413 "MachineIndependent/glslang.y"
+  case 516: /* type_specifier_nonarray: U64IMAGE2DMS  */
+#line 3428 "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 10575 "MachineIndependent/glslang_tab.cpp"
+#line 10647 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 515: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
-#line 3418 "MachineIndependent/glslang.y"
+  case 517: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
+#line 3433 "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 10585 "MachineIndependent/glslang_tab.cpp"
+#line 10657 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 516: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
-#line 3423 "MachineIndependent/glslang.y"
+  case 518: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
+#line 3438 "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 10595 "MachineIndependent/glslang_tab.cpp"
+#line 10667 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 517: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
-#line 3428 "MachineIndependent/glslang.y"
+  case 519: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
+#line 3443 "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 10606 "MachineIndependent/glslang_tab.cpp"
+#line 10678 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 518: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
-#line 3434 "MachineIndependent/glslang.y"
+  case 520: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
+#line 3449 "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 10617 "MachineIndependent/glslang_tab.cpp"
+#line 10689 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 519: /* type_specifier_nonarray: SUBPASSINPUT  */
-#line 3440 "MachineIndependent/glslang.y"
+  case 521: /* type_specifier_nonarray: ATTACHMENTEXT  */
+#line 3455 "MachineIndependent/glslang.y"
+                    {
+        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setAttachmentEXT(EbtFloat);
+    }
+#line 10700 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 522: /* type_specifier_nonarray: IATTACHMENTEXT  */
+#line 3461 "MachineIndependent/glslang.y"
+                     {
+        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setAttachmentEXT(EbtInt);
+    }
+#line 10711 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 523: /* type_specifier_nonarray: UATTACHMENTEXT  */
+#line 3467 "MachineIndependent/glslang.y"
+                     {
+        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.setAttachmentEXT(EbtUint);
+    }
+#line 10722 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 524: /* type_specifier_nonarray: SUBPASSINPUT  */
+#line 3473 "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 10628 "MachineIndependent/glslang_tab.cpp"
+#line 10733 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 520: /* type_specifier_nonarray: SUBPASSINPUTMS  */
-#line 3446 "MachineIndependent/glslang.y"
+  case 525: /* type_specifier_nonarray: SUBPASSINPUTMS  */
+#line 3479 "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 10639 "MachineIndependent/glslang_tab.cpp"
+#line 10744 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 521: /* type_specifier_nonarray: F16SUBPASSINPUT  */
-#line 3452 "MachineIndependent/glslang.y"
+  case 526: /* type_specifier_nonarray: F16SUBPASSINPUT  */
+#line 3485 "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");
@@ -10647,11 +10752,11 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 10651 "MachineIndependent/glslang_tab.cpp"
+#line 10756 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 522: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
-#line 3459 "MachineIndependent/glslang.y"
+  case 527: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
+#line 3492 "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");
@@ -10659,107 +10764,116 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 10663 "MachineIndependent/glslang_tab.cpp"
+#line 10768 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 523: /* type_specifier_nonarray: ISUBPASSINPUT  */
-#line 3466 "MachineIndependent/glslang.y"
+  case 528: /* type_specifier_nonarray: ISUBPASSINPUT  */
+#line 3499 "MachineIndependent/glslang.y"
                     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 10674 "MachineIndependent/glslang_tab.cpp"
+#line 10779 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 524: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
-#line 3472 "MachineIndependent/glslang.y"
+  case 529: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
+#line 3505 "MachineIndependent/glslang.y"
                       {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 10685 "MachineIndependent/glslang_tab.cpp"
+#line 10790 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 525: /* type_specifier_nonarray: USUBPASSINPUT  */
-#line 3478 "MachineIndependent/glslang.y"
+  case 530: /* type_specifier_nonarray: USUBPASSINPUT  */
+#line 3511 "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 10696 "MachineIndependent/glslang_tab.cpp"
+#line 10801 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 526: /* type_specifier_nonarray: USUBPASSINPUTMS  */
-#line 3484 "MachineIndependent/glslang.y"
+  case 531: /* type_specifier_nonarray: USUBPASSINPUTMS  */
+#line 3517 "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 10707 "MachineIndependent/glslang_tab.cpp"
+#line 10812 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 527: /* type_specifier_nonarray: FCOOPMATNV  */
-#line 3490 "MachineIndependent/glslang.y"
+  case 532: /* type_specifier_nonarray: FCOOPMATNV  */
+#line 3523 "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 10718 "MachineIndependent/glslang_tab.cpp"
+#line 10823 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 528: /* type_specifier_nonarray: ICOOPMATNV  */
-#line 3496 "MachineIndependent/glslang.y"
+  case 533: /* type_specifier_nonarray: ICOOPMATNV  */
+#line 3529 "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 10729 "MachineIndependent/glslang_tab.cpp"
+#line 10834 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 529: /* type_specifier_nonarray: UCOOPMATNV  */
-#line 3502 "MachineIndependent/glslang.y"
+  case 534: /* type_specifier_nonarray: UCOOPMATNV  */
+#line 3535 "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 10740 "MachineIndependent/glslang_tab.cpp"
+#line 10845 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 530: /* type_specifier_nonarray: spirv_type_specifier  */
-#line 3508 "MachineIndependent/glslang.y"
+  case 535: /* type_specifier_nonarray: spirv_type_specifier  */
+#line 3541 "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 10749 "MachineIndependent/glslang_tab.cpp"
+#line 10854 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 531: /* type_specifier_nonarray: struct_specifier  */
-#line 3513 "MachineIndependent/glslang.y"
+  case 536: /* type_specifier_nonarray: HITOBJECTNV  */
+#line 3545 "MachineIndependent/glslang.y"
+                      {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtHitObjectNV;
+	}
+#line 10863 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 537: /* type_specifier_nonarray: struct_specifier  */
+#line 3550 "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 10759 "MachineIndependent/glslang_tab.cpp"
+#line 10873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 532: /* type_specifier_nonarray: TYPE_NAME  */
-#line 3518 "MachineIndependent/glslang.y"
+  case 538: /* type_specifier_nonarray: TYPE_NAME  */
+#line 3555 "MachineIndependent/glslang.y"
                 {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -10773,47 +10887,47 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 10777 "MachineIndependent/glslang_tab.cpp"
+#line 10891 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 533: /* precision_qualifier: HIGH_PRECISION  */
-#line 3534 "MachineIndependent/glslang.y"
+  case 539: /* precision_qualifier: HIGH_PRECISION  */
+#line 3571 "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 10787 "MachineIndependent/glslang_tab.cpp"
+#line 10901 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 534: /* precision_qualifier: MEDIUM_PRECISION  */
-#line 3539 "MachineIndependent/glslang.y"
+  case 540: /* precision_qualifier: MEDIUM_PRECISION  */
+#line 3576 "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 10797 "MachineIndependent/glslang_tab.cpp"
+#line 10911 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 535: /* precision_qualifier: LOW_PRECISION  */
-#line 3544 "MachineIndependent/glslang.y"
+  case 541: /* precision_qualifier: LOW_PRECISION  */
+#line 3581 "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 10807 "MachineIndependent/glslang_tab.cpp"
+#line 10921 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 536: /* $@3: %empty  */
-#line 3552 "MachineIndependent/glslang.y"
+  case 542: /* $@3: %empty  */
+#line 3589 "MachineIndependent/glslang.y"
                                    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 10813 "MachineIndependent/glslang_tab.cpp"
+#line 10927 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 537: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
-#line 3552 "MachineIndependent/glslang.y"
+  case 543: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
+#line 3589 "MachineIndependent/glslang.y"
                                                                                                                    {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -10825,17 +10939,17 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10829 "MachineIndependent/glslang_tab.cpp"
+#line 10943 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 538: /* $@4: %empty  */
-#line 3563 "MachineIndependent/glslang.y"
+  case 544: /* $@4: %empty  */
+#line 3600 "MachineIndependent/glslang.y"
                         { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 10835 "MachineIndependent/glslang_tab.cpp"
+#line 10949 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 539: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
-#line 3563 "MachineIndependent/glslang.y"
+  case 545: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
+#line 3600 "MachineIndependent/glslang.y"
                                                                                                         {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -10843,19 +10957,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10847 "MachineIndependent/glslang_tab.cpp"
+#line 10961 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 540: /* struct_declaration_list: struct_declaration  */
-#line 3573 "MachineIndependent/glslang.y"
+  case 546: /* struct_declaration_list: struct_declaration  */
+#line 3610 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 10855 "MachineIndependent/glslang_tab.cpp"
+#line 10969 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 541: /* struct_declaration_list: struct_declaration_list struct_declaration  */
-#line 3576 "MachineIndependent/glslang.y"
+  case 547: /* struct_declaration_list: struct_declaration_list struct_declaration  */
+#line 3613 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -10866,11 +10980,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 10870 "MachineIndependent/glslang_tab.cpp"
+#line 10984 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 542: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
-#line 3589 "MachineIndependent/glslang.y"
+  case 548: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
+#line 3626 "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");
@@ -10893,11 +11007,11 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 10897 "MachineIndependent/glslang_tab.cpp"
+#line 11011 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 543: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
-#line 3611 "MachineIndependent/glslang.y"
+  case 549: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
+#line 3648 "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");
@@ -10922,38 +11036,38 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 10926 "MachineIndependent/glslang_tab.cpp"
+#line 11040 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 544: /* struct_declarator_list: struct_declarator  */
-#line 3638 "MachineIndependent/glslang.y"
+  case 550: /* struct_declarator_list: struct_declarator  */
+#line 3675 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 10935 "MachineIndependent/glslang_tab.cpp"
+#line 11049 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 545: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
-#line 3642 "MachineIndependent/glslang.y"
+  case 551: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
+#line 3679 "MachineIndependent/glslang.y"
                                                      {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 10943 "MachineIndependent/glslang_tab.cpp"
+#line 11057 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 546: /* struct_declarator: IDENTIFIER  */
-#line 3648 "MachineIndependent/glslang.y"
+  case 552: /* struct_declarator: IDENTIFIER  */
+#line 3685 "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 10953 "MachineIndependent/glslang_tab.cpp"
+#line 11067 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 547: /* struct_declarator: IDENTIFIER array_specifier  */
-#line 3653 "MachineIndependent/glslang.y"
+  case 553: /* struct_declarator: IDENTIFIER array_specifier  */
+#line 3690 "MachineIndependent/glslang.y"
                                  {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -10962,246 +11076,246 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 10966 "MachineIndependent/glslang_tab.cpp"
+#line 11080 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 548: /* initializer: assignment_expression  */
-#line 3664 "MachineIndependent/glslang.y"
+  case 554: /* initializer: assignment_expression  */
+#line 3701 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10974 "MachineIndependent/glslang_tab.cpp"
+#line 11088 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 549: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
-#line 3668 "MachineIndependent/glslang.y"
+  case 555: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
+#line 3705 "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 10985 "MachineIndependent/glslang_tab.cpp"
+#line 11099 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 550: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
-#line 3674 "MachineIndependent/glslang.y"
+  case 556: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
+#line 3711 "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 10996 "MachineIndependent/glslang_tab.cpp"
+#line 11110 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 551: /* initializer: LEFT_BRACE RIGHT_BRACE  */
-#line 3680 "MachineIndependent/glslang.y"
+  case 557: /* initializer: LEFT_BRACE RIGHT_BRACE  */
+#line 3717 "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 11007 "MachineIndependent/glslang_tab.cpp"
+#line 11121 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 552: /* initializer_list: initializer  */
-#line 3691 "MachineIndependent/glslang.y"
+  case 558: /* initializer_list: initializer  */
+#line 3728 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 11015 "MachineIndependent/glslang_tab.cpp"
+#line 11129 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 553: /* initializer_list: initializer_list COMMA initializer  */
-#line 3694 "MachineIndependent/glslang.y"
+  case 559: /* initializer_list: initializer_list COMMA initializer  */
+#line 3731 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11023 "MachineIndependent/glslang_tab.cpp"
+#line 11137 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 554: /* declaration_statement: declaration  */
-#line 3701 "MachineIndependent/glslang.y"
+  case 560: /* declaration_statement: declaration  */
+#line 3738 "MachineIndependent/glslang.y"
                   { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11029 "MachineIndependent/glslang_tab.cpp"
+#line 11143 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 555: /* statement: compound_statement  */
-#line 3705 "MachineIndependent/glslang.y"
+  case 561: /* statement: compound_statement  */
+#line 3742 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11035 "MachineIndependent/glslang_tab.cpp"
+#line 11149 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 556: /* statement: simple_statement  */
-#line 3706 "MachineIndependent/glslang.y"
+  case 562: /* statement: simple_statement  */
+#line 3743 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11041 "MachineIndependent/glslang_tab.cpp"
+#line 11155 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 557: /* simple_statement: declaration_statement  */
-#line 3712 "MachineIndependent/glslang.y"
+  case 563: /* simple_statement: declaration_statement  */
+#line 3749 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11047 "MachineIndependent/glslang_tab.cpp"
+#line 11161 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 558: /* simple_statement: expression_statement  */
-#line 3713 "MachineIndependent/glslang.y"
+  case 564: /* simple_statement: expression_statement  */
+#line 3750 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11053 "MachineIndependent/glslang_tab.cpp"
+#line 11167 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 559: /* simple_statement: selection_statement  */
-#line 3714 "MachineIndependent/glslang.y"
+  case 565: /* simple_statement: selection_statement  */
+#line 3751 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11059 "MachineIndependent/glslang_tab.cpp"
+#line 11173 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 560: /* simple_statement: switch_statement  */
-#line 3715 "MachineIndependent/glslang.y"
+  case 566: /* simple_statement: switch_statement  */
+#line 3752 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11065 "MachineIndependent/glslang_tab.cpp"
+#line 11179 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 561: /* simple_statement: case_label  */
-#line 3716 "MachineIndependent/glslang.y"
+  case 567: /* simple_statement: case_label  */
+#line 3753 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11071 "MachineIndependent/glslang_tab.cpp"
+#line 11185 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 562: /* simple_statement: iteration_statement  */
-#line 3717 "MachineIndependent/glslang.y"
+  case 568: /* simple_statement: iteration_statement  */
+#line 3754 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11077 "MachineIndependent/glslang_tab.cpp"
+#line 11191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 563: /* simple_statement: jump_statement  */
-#line 3718 "MachineIndependent/glslang.y"
+  case 569: /* simple_statement: jump_statement  */
+#line 3755 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11083 "MachineIndependent/glslang_tab.cpp"
+#line 11197 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 564: /* simple_statement: demote_statement  */
-#line 3720 "MachineIndependent/glslang.y"
+  case 570: /* simple_statement: demote_statement  */
+#line 3757 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11089 "MachineIndependent/glslang_tab.cpp"
+#line 11203 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 565: /* demote_statement: DEMOTE SEMICOLON  */
-#line 3726 "MachineIndependent/glslang.y"
+  case 571: /* demote_statement: DEMOTE SEMICOLON  */
+#line 3763 "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 11099 "MachineIndependent/glslang_tab.cpp"
+#line 11213 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 566: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
-#line 3735 "MachineIndependent/glslang.y"
+  case 572: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
+#line 3772 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermNode) = 0; }
-#line 11105 "MachineIndependent/glslang_tab.cpp"
+#line 11219 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 567: /* $@5: %empty  */
-#line 3736 "MachineIndependent/glslang.y"
+  case 573: /* $@5: %empty  */
+#line 3773 "MachineIndependent/glslang.y"
                  {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 11114 "MachineIndependent/glslang_tab.cpp"
+#line 11228 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 568: /* $@6: %empty  */
-#line 3740 "MachineIndependent/glslang.y"
+  case 574: /* $@6: %empty  */
+#line 3777 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 11123 "MachineIndependent/glslang_tab.cpp"
+#line 11237 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 569: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
-#line 3744 "MachineIndependent/glslang.y"
+  case 575: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
+#line 3781 "MachineIndependent/glslang.y"
                   {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 11133 "MachineIndependent/glslang_tab.cpp"
+#line 11247 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 570: /* statement_no_new_scope: compound_statement_no_new_scope  */
-#line 3752 "MachineIndependent/glslang.y"
+  case 576: /* statement_no_new_scope: compound_statement_no_new_scope  */
+#line 3789 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11139 "MachineIndependent/glslang_tab.cpp"
+#line 11253 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 571: /* statement_no_new_scope: simple_statement  */
-#line 3753 "MachineIndependent/glslang.y"
+  case 577: /* statement_no_new_scope: simple_statement  */
+#line 3790 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11145 "MachineIndependent/glslang_tab.cpp"
+#line 11259 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 572: /* $@7: %empty  */
-#line 3757 "MachineIndependent/glslang.y"
+  case 578: /* $@7: %empty  */
+#line 3794 "MachineIndependent/glslang.y"
       {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11153 "MachineIndependent/glslang_tab.cpp"
+#line 11267 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 573: /* statement_scoped: $@7 compound_statement  */
-#line 3760 "MachineIndependent/glslang.y"
+  case 579: /* statement_scoped: $@7 compound_statement  */
+#line 3797 "MachineIndependent/glslang.y"
                           {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11162 "MachineIndependent/glslang_tab.cpp"
+#line 11276 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 574: /* $@8: %empty  */
-#line 3764 "MachineIndependent/glslang.y"
+  case 580: /* $@8: %empty  */
+#line 3801 "MachineIndependent/glslang.y"
       {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11172 "MachineIndependent/glslang_tab.cpp"
+#line 11286 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 575: /* statement_scoped: $@8 simple_statement  */
-#line 3769 "MachineIndependent/glslang.y"
+  case 581: /* statement_scoped: $@8 simple_statement  */
+#line 3806 "MachineIndependent/glslang.y"
                        {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11183 "MachineIndependent/glslang_tab.cpp"
+#line 11297 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 576: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
-#line 3778 "MachineIndependent/glslang.y"
+  case 582: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
+#line 3815 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.intermNode) = 0;
     }
-#line 11191 "MachineIndependent/glslang_tab.cpp"
+#line 11305 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 577: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
-#line 3781 "MachineIndependent/glslang.y"
+  case 583: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
+#line 3818 "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 11201 "MachineIndependent/glslang_tab.cpp"
+#line 11315 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 578: /* statement_list: statement  */
-#line 3789 "MachineIndependent/glslang.y"
+  case 584: /* statement_list: statement  */
+#line 3826 "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 ||
@@ -11210,11 +11324,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 11214 "MachineIndependent/glslang_tab.cpp"
+#line 11328 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 579: /* statement_list: statement_list statement  */
-#line 3797 "MachineIndependent/glslang.y"
+  case 585: /* statement_list: statement_list statement  */
+#line 3834 "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)) {
@@ -11223,77 +11337,77 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11227 "MachineIndependent/glslang_tab.cpp"
+#line 11341 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 580: /* expression_statement: SEMICOLON  */
-#line 3808 "MachineIndependent/glslang.y"
+  case 586: /* expression_statement: SEMICOLON  */
+#line 3845 "MachineIndependent/glslang.y"
                  { (yyval.interm.intermNode) = 0; }
-#line 11233 "MachineIndependent/glslang_tab.cpp"
+#line 11347 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 581: /* expression_statement: expression SEMICOLON  */
-#line 3809 "MachineIndependent/glslang.y"
+  case 587: /* expression_statement: expression SEMICOLON  */
+#line 3846 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 11239 "MachineIndependent/glslang_tab.cpp"
+#line 11353 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 582: /* selection_statement: selection_statement_nonattributed  */
-#line 3813 "MachineIndependent/glslang.y"
+  case 588: /* selection_statement: selection_statement_nonattributed  */
+#line 3850 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11247 "MachineIndependent/glslang_tab.cpp"
+#line 11361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 583: /* selection_statement: attribute selection_statement_nonattributed  */
-#line 3817 "MachineIndependent/glslang.y"
+  case 589: /* selection_statement: attribute selection_statement_nonattributed  */
+#line 3854 "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 11257 "MachineIndependent/glslang_tab.cpp"
+#line 11371 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 584: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
-#line 3825 "MachineIndependent/glslang.y"
+  case 590: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
+#line 3862 "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 11266 "MachineIndependent/glslang_tab.cpp"
+#line 11380 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 585: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
-#line 3832 "MachineIndependent/glslang.y"
+  case 591: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
+#line 3869 "MachineIndependent/glslang.y"
                                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 11275 "MachineIndependent/glslang_tab.cpp"
+#line 11389 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 586: /* selection_rest_statement: statement_scoped  */
-#line 3836 "MachineIndependent/glslang.y"
+  case 592: /* selection_rest_statement: statement_scoped  */
+#line 3873 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11284 "MachineIndependent/glslang_tab.cpp"
+#line 11398 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 587: /* condition: expression  */
-#line 3844 "MachineIndependent/glslang.y"
+  case 593: /* condition: expression  */
+#line 3881 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11293 "MachineIndependent/glslang_tab.cpp"
+#line 11407 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 588: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
-#line 3848 "MachineIndependent/glslang.y"
+  case 594: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
+#line 3885 "MachineIndependent/glslang.y"
                                                         {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -11304,29 +11418,29 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 11308 "MachineIndependent/glslang_tab.cpp"
+#line 11422 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 589: /* switch_statement: switch_statement_nonattributed  */
-#line 3861 "MachineIndependent/glslang.y"
+  case 595: /* switch_statement: switch_statement_nonattributed  */
+#line 3898 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11316 "MachineIndependent/glslang_tab.cpp"
+#line 11430 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 590: /* switch_statement: attribute switch_statement_nonattributed  */
-#line 3865 "MachineIndependent/glslang.y"
+  case 596: /* switch_statement: attribute switch_statement_nonattributed  */
+#line 3902 "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 11326 "MachineIndependent/glslang_tab.cpp"
+#line 11440 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 591: /* $@9: %empty  */
-#line 3873 "MachineIndependent/glslang.y"
+  case 597: /* $@9: %empty  */
+#line 3910 "MachineIndependent/glslang.y"
                                                {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -11335,11 +11449,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 11339 "MachineIndependent/glslang_tab.cpp"
+#line 11453 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 592: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
-#line 3881 "MachineIndependent/glslang.y"
+  case 598: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
+#line 3918 "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();
@@ -11349,27 +11463,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11353 "MachineIndependent/glslang_tab.cpp"
+#line 11467 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 593: /* switch_statement_list: %empty  */
-#line 3893 "MachineIndependent/glslang.y"
+  case 599: /* switch_statement_list: %empty  */
+#line 3930 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
     }
-#line 11361 "MachineIndependent/glslang_tab.cpp"
+#line 11475 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 594: /* switch_statement_list: statement_list  */
-#line 3896 "MachineIndependent/glslang.y"
+  case 600: /* switch_statement_list: statement_list  */
+#line 3933 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11369 "MachineIndependent/glslang_tab.cpp"
+#line 11483 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 595: /* case_label: CASE expression COLON  */
-#line 3902 "MachineIndependent/glslang.y"
+  case 601: /* case_label: CASE expression COLON  */
+#line 3939 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11382,11 +11496,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 11386 "MachineIndependent/glslang_tab.cpp"
+#line 11500 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 596: /* case_label: DEFAULT COLON  */
-#line 3914 "MachineIndependent/glslang.y"
+  case 602: /* case_label: DEFAULT COLON  */
+#line 3951 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11396,29 +11510,29 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 11400 "MachineIndependent/glslang_tab.cpp"
+#line 11514 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 597: /* iteration_statement: iteration_statement_nonattributed  */
-#line 3926 "MachineIndependent/glslang.y"
+  case 603: /* iteration_statement: iteration_statement_nonattributed  */
+#line 3963 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11408 "MachineIndependent/glslang_tab.cpp"
+#line 11522 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 598: /* iteration_statement: attribute iteration_statement_nonattributed  */
-#line 3930 "MachineIndependent/glslang.y"
+  case 604: /* iteration_statement: attribute iteration_statement_nonattributed  */
+#line 3967 "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 11418 "MachineIndependent/glslang_tab.cpp"
+#line 11532 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 599: /* $@10: %empty  */
-#line 3938 "MachineIndependent/glslang.y"
+  case 605: /* $@10: %empty  */
+#line 3975 "MachineIndependent/glslang.y"
                        {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -11427,11 +11541,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11431 "MachineIndependent/glslang_tab.cpp"
+#line 11545 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 600: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
-#line 3946 "MachineIndependent/glslang.y"
+  case 606: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
+#line 3983 "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);
@@ -11439,22 +11553,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11443 "MachineIndependent/glslang_tab.cpp"
+#line 11557 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 601: /* $@11: %empty  */
-#line 3953 "MachineIndependent/glslang.y"
+  case 607: /* $@11: %empty  */
+#line 3990 "MachineIndependent/glslang.y"
          {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11454 "MachineIndependent/glslang_tab.cpp"
+#line 11568 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 602: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
-#line 3959 "MachineIndependent/glslang.y"
+  case 608: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
+#line 3996 "MachineIndependent/glslang.y"
                                                                   {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -11467,22 +11581,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11471 "MachineIndependent/glslang_tab.cpp"
+#line 11585 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 603: /* $@12: %empty  */
-#line 3971 "MachineIndependent/glslang.y"
+  case 609: /* $@12: %empty  */
+#line 4008 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11482 "MachineIndependent/glslang_tab.cpp"
+#line 11596 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 610: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
+#line 4014 "MachineIndependent/glslang.y"
                                                                                {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -11495,81 +11609,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11499 "MachineIndependent/glslang_tab.cpp"
+#line 11613 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 605: /* for_init_statement: expression_statement  */
-#line 3992 "MachineIndependent/glslang.y"
+  case 611: /* for_init_statement: expression_statement  */
+#line 4029 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11507 "MachineIndependent/glslang_tab.cpp"
+#line 11621 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 606: /* for_init_statement: declaration_statement  */
-#line 3995 "MachineIndependent/glslang.y"
+  case 612: /* for_init_statement: declaration_statement  */
+#line 4032 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11515 "MachineIndependent/glslang_tab.cpp"
+#line 11629 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 607: /* conditionopt: condition  */
-#line 4001 "MachineIndependent/glslang.y"
+  case 613: /* conditionopt: condition  */
+#line 4038 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11523 "MachineIndependent/glslang_tab.cpp"
+#line 11637 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 608: /* conditionopt: %empty  */
-#line 4004 "MachineIndependent/glslang.y"
+  case 614: /* conditionopt: %empty  */
+#line 4041 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 11531 "MachineIndependent/glslang_tab.cpp"
+#line 11645 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 609: /* for_rest_statement: conditionopt SEMICOLON  */
-#line 4010 "MachineIndependent/glslang.y"
+  case 615: /* for_rest_statement: conditionopt SEMICOLON  */
+#line 4047 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11540 "MachineIndependent/glslang_tab.cpp"
+#line 11654 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 610: /* for_rest_statement: conditionopt SEMICOLON expression  */
-#line 4014 "MachineIndependent/glslang.y"
+  case 616: /* for_rest_statement: conditionopt SEMICOLON expression  */
+#line 4051 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11549 "MachineIndependent/glslang_tab.cpp"
+#line 11663 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 611: /* jump_statement: CONTINUE SEMICOLON  */
-#line 4021 "MachineIndependent/glslang.y"
+  case 617: /* jump_statement: CONTINUE SEMICOLON  */
+#line 4058 "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 11559 "MachineIndependent/glslang_tab.cpp"
+#line 11673 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 612: /* jump_statement: BREAK SEMICOLON  */
-#line 4026 "MachineIndependent/glslang.y"
+  case 618: /* jump_statement: BREAK SEMICOLON  */
+#line 4063 "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 11569 "MachineIndependent/glslang_tab.cpp"
+#line 11683 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 613: /* jump_statement: RETURN SEMICOLON  */
-#line 4031 "MachineIndependent/glslang.y"
+  case 619: /* jump_statement: RETURN SEMICOLON  */
+#line 4068 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -11577,101 +11691,101 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 11581 "MachineIndependent/glslang_tab.cpp"
+#line 11695 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 614: /* jump_statement: RETURN expression SEMICOLON  */
-#line 4038 "MachineIndependent/glslang.y"
+  case 620: /* jump_statement: RETURN expression SEMICOLON  */
+#line 4075 "MachineIndependent/glslang.y"
                                   {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11589 "MachineIndependent/glslang_tab.cpp"
+#line 11703 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 615: /* jump_statement: DISCARD SEMICOLON  */
-#line 4041 "MachineIndependent/glslang.y"
+  case 621: /* jump_statement: DISCARD SEMICOLON  */
+#line 4078 "MachineIndependent/glslang.y"
                         {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 11598 "MachineIndependent/glslang_tab.cpp"
+#line 11712 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 616: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
-#line 4045 "MachineIndependent/glslang.y"
+  case 622: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
+#line 4082 "MachineIndependent/glslang.y"
                                      {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
     }
-#line 11607 "MachineIndependent/glslang_tab.cpp"
+#line 11721 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 617: /* jump_statement: TERMINATE_RAY SEMICOLON  */
-#line 4050 "MachineIndependent/glslang.y"
+  case 623: /* jump_statement: TERMINATE_RAY SEMICOLON  */
+#line 4087 "MachineIndependent/glslang.y"
                               {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
     }
-#line 11616 "MachineIndependent/glslang_tab.cpp"
+#line 11730 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 618: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
-#line 4054 "MachineIndependent/glslang.y"
+  case 624: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
+#line 4091 "MachineIndependent/glslang.y"
                                     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
     }
-#line 11625 "MachineIndependent/glslang_tab.cpp"
+#line 11739 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 619: /* translation_unit: external_declaration  */
-#line 4064 "MachineIndependent/glslang.y"
+  case 625: /* translation_unit: external_declaration  */
+#line 4101 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 11634 "MachineIndependent/glslang_tab.cpp"
+#line 11748 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 620: /* translation_unit: translation_unit external_declaration  */
-#line 4068 "MachineIndependent/glslang.y"
+  case 626: /* translation_unit: translation_unit external_declaration  */
+#line 4105 "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 11645 "MachineIndependent/glslang_tab.cpp"
+#line 11759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 621: /* external_declaration: function_definition  */
-#line 4077 "MachineIndependent/glslang.y"
+  case 627: /* external_declaration: function_definition  */
+#line 4114 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11653 "MachineIndependent/glslang_tab.cpp"
+#line 11767 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 622: /* external_declaration: declaration  */
-#line 4080 "MachineIndependent/glslang.y"
+  case 628: /* external_declaration: declaration  */
+#line 4117 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11661 "MachineIndependent/glslang_tab.cpp"
+#line 11775 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 623: /* external_declaration: SEMICOLON  */
-#line 4084 "MachineIndependent/glslang.y"
+  case 629: /* external_declaration: SEMICOLON  */
+#line 4121 "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 11671 "MachineIndependent/glslang_tab.cpp"
+#line 11785 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 624: /* $@13: %empty  */
-#line 4093 "MachineIndependent/glslang.y"
+  case 630: /* $@13: %empty  */
+#line 4130 "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);
@@ -11684,11 +11798,11 @@
             ++parseContext.statementNestingLevel;
         }
     }
-#line 11688 "MachineIndependent/glslang_tab.cpp"
+#line 11802 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 625: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
-#line 4105 "MachineIndependent/glslang.y"
+  case 631: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
+#line 4142 "MachineIndependent/glslang.y"
                                     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -11715,228 +11829,228 @@
             --parseContext.statementNestingLevel;
         }
     }
-#line 11719 "MachineIndependent/glslang_tab.cpp"
+#line 11833 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 626: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
-#line 4135 "MachineIndependent/glslang.y"
+  case 632: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
+#line 4172 "MachineIndependent/glslang.y"
                                                                            {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
     }
-#line 11727 "MachineIndependent/glslang_tab.cpp"
+#line 11841 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 627: /* attribute_list: single_attribute  */
-#line 4140 "MachineIndependent/glslang.y"
+  case 633: /* attribute_list: single_attribute  */
+#line 4177 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 11735 "MachineIndependent/glslang_tab.cpp"
+#line 11849 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 628: /* attribute_list: attribute_list COMMA single_attribute  */
-#line 4143 "MachineIndependent/glslang.y"
+  case 634: /* attribute_list: attribute_list COMMA single_attribute  */
+#line 4180 "MachineIndependent/glslang.y"
                                             {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 11743 "MachineIndependent/glslang_tab.cpp"
+#line 11857 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 629: /* single_attribute: IDENTIFIER  */
-#line 4148 "MachineIndependent/glslang.y"
+  case 635: /* single_attribute: IDENTIFIER  */
+#line 4185 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 11751 "MachineIndependent/glslang_tab.cpp"
+#line 11865 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 630: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
-#line 4151 "MachineIndependent/glslang.y"
+  case 636: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
+#line 4188 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11759 "MachineIndependent/glslang_tab.cpp"
+#line 11873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 631: /* spirv_requirements_list: spirv_requirements_parameter  */
-#line 4158 "MachineIndependent/glslang.y"
+  case 637: /* spirv_requirements_list: spirv_requirements_parameter  */
+#line 4195 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
     }
-#line 11767 "MachineIndependent/glslang_tab.cpp"
+#line 11881 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 632: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
-#line 4161 "MachineIndependent/glslang.y"
+  case 638: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
+#line 4198 "MachineIndependent/glslang.y"
                                                                  {
         (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
     }
-#line 11775 "MachineIndependent/glslang_tab.cpp"
+#line 11889 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 633: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
-#line 4166 "MachineIndependent/glslang.y"
+  case 639: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
+#line 4203 "MachineIndependent/glslang.y"
                                                                        {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
     }
-#line 11783 "MachineIndependent/glslang_tab.cpp"
+#line 11897 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 634: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
-#line 4169 "MachineIndependent/glslang.y"
+  case 640: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
+#line 4206 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11791 "MachineIndependent/glslang_tab.cpp"
+#line 11905 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 635: /* spirv_extension_list: STRING_LITERAL  */
-#line 4174 "MachineIndependent/glslang.y"
+  case 641: /* spirv_extension_list: STRING_LITERAL  */
+#line 4211 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 11799 "MachineIndependent/glslang_tab.cpp"
+#line 11913 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 636: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
-#line 4177 "MachineIndependent/glslang.y"
+  case 642: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
+#line 4214 "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 11807 "MachineIndependent/glslang_tab.cpp"
+#line 11921 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 637: /* spirv_capability_list: INTCONSTANT  */
-#line 4182 "MachineIndependent/glslang.y"
+  case 643: /* spirv_capability_list: INTCONSTANT  */
+#line 4219 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
     }
-#line 11815 "MachineIndependent/glslang_tab.cpp"
+#line 11929 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 638: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
-#line 4185 "MachineIndependent/glslang.y"
+  case 644: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
+#line 4222 "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 11823 "MachineIndependent/glslang_tab.cpp"
+#line 11937 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4190 "MachineIndependent/glslang.y"
+  case 645: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4227 "MachineIndependent/glslang.y"
                                                               {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11832 "MachineIndependent/glslang_tab.cpp"
+#line 11946 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4194 "MachineIndependent/glslang.y"
+  case 646: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4231 "MachineIndependent/glslang.y"
                                                                                             {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11842 "MachineIndependent/glslang_tab.cpp"
+#line 11956 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 647: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4236 "MachineIndependent/glslang.y"
                                                                                                         {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11851 "MachineIndependent/glslang_tab.cpp"
+#line 11965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 648: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4240 "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 11861 "MachineIndependent/glslang_tab.cpp"
+#line 11975 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 649: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
+#line 4245 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11870 "MachineIndependent/glslang_tab.cpp"
+#line 11984 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 650: /* 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 4249 "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 11880 "MachineIndependent/glslang_tab.cpp"
+#line 11994 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 645: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
-#line 4219 "MachineIndependent/glslang.y"
+  case 651: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
+#line 4256 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 11888 "MachineIndependent/glslang_tab.cpp"
+#line 12002 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 646: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
-#line 4222 "MachineIndependent/glslang.y"
+  case 652: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
+#line 4259 "MachineIndependent/glslang.y"
                                                                                {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11896 "MachineIndependent/glslang_tab.cpp"
+#line 12010 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 647: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
-#line 4227 "MachineIndependent/glslang.y"
+  case 653: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
+#line 4264 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 11904 "MachineIndependent/glslang_tab.cpp"
+#line 12018 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 648: /* spirv_execution_mode_parameter: INTCONSTANT  */
-#line 4230 "MachineIndependent/glslang.y"
+  case 654: /* spirv_execution_mode_parameter: INTCONSTANT  */
+#line 4267 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 11912 "MachineIndependent/glslang_tab.cpp"
+#line 12026 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 649: /* spirv_execution_mode_parameter: UINTCONSTANT  */
-#line 4233 "MachineIndependent/glslang.y"
+  case 655: /* spirv_execution_mode_parameter: UINTCONSTANT  */
+#line 4270 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 11920 "MachineIndependent/glslang_tab.cpp"
+#line 12034 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 650: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
-#line 4236 "MachineIndependent/glslang.y"
+  case 656: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
+#line 4273 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 11928 "MachineIndependent/glslang_tab.cpp"
+#line 12042 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 651: /* spirv_execution_mode_parameter: STRING_LITERAL  */
-#line 4239 "MachineIndependent/glslang.y"
+  case 657: /* spirv_execution_mode_parameter: STRING_LITERAL  */
+#line 4276 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 11936 "MachineIndependent/glslang_tab.cpp"
+#line 12050 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 652: /* spirv_execution_mode_id_parameter_list: constant_expression  */
-#line 4244 "MachineIndependent/glslang.y"
+  case 658: /* spirv_execution_mode_id_parameter_list: constant_expression  */
+#line 4281 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11946,11 +12060,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 11950 "MachineIndependent/glslang_tab.cpp"
+#line 12064 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 653: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
-#line 4253 "MachineIndependent/glslang.y"
+  case 659: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
+#line 4290 "MachineIndependent/glslang.y"
                                                                        {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11960,310 +12074,351 @@
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11964 "MachineIndependent/glslang_tab.cpp"
+#line 12078 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 654: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4264 "MachineIndependent/glslang.y"
+  case 660: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4301 "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 11974 "MachineIndependent/glslang_tab.cpp"
+#line 12088 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 655: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4269 "MachineIndependent/glslang.y"
+  case 661: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4306 "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 11985 "MachineIndependent/glslang_tab.cpp"
+#line 12099 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4277 "MachineIndependent/glslang.y"
+  case 662: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4314 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
     }
-#line 11994 "MachineIndependent/glslang_tab.cpp"
+#line 12108 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4281 "MachineIndependent/glslang.y"
+  case 663: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4318 "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 12004 "MachineIndependent/glslang_tab.cpp"
+#line 12118 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4286 "MachineIndependent/glslang.y"
+  case 664: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4323 "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 12013 "MachineIndependent/glslang_tab.cpp"
+#line 12127 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 665: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4327 "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 12023 "MachineIndependent/glslang_tab.cpp"
+#line 12137 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4295 "MachineIndependent/glslang.y"
+  case 666: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4332 "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 12032 "MachineIndependent/glslang_tab.cpp"
+#line 12146 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 667: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4336 "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 12042 "MachineIndependent/glslang_tab.cpp"
+#line 12156 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 662: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4304 "MachineIndependent/glslang.y"
+  case 668: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4341 "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 12051 "MachineIndependent/glslang_tab.cpp"
+#line 12165 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 669: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4345 "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 12061 "MachineIndependent/glslang_tab.cpp"
+#line 12175 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 664: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
-#line 4315 "MachineIndependent/glslang.y"
+  case 670: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
+#line 4352 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 12069 "MachineIndependent/glslang_tab.cpp"
+#line 12183 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 665: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
-#line 4318 "MachineIndependent/glslang.y"
+  case 671: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
+#line 4355 "MachineIndependent/glslang.y"
                                                                    {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 12077 "MachineIndependent/glslang_tab.cpp"
+#line 12191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 666: /* spirv_decorate_parameter: FLOATCONSTANT  */
-#line 4323 "MachineIndependent/glslang.y"
+  case 672: /* spirv_decorate_parameter: FLOATCONSTANT  */
+#line 4360 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12085 "MachineIndependent/glslang_tab.cpp"
+#line 12199 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 667: /* spirv_decorate_parameter: INTCONSTANT  */
-#line 4326 "MachineIndependent/glslang.y"
+  case 673: /* spirv_decorate_parameter: INTCONSTANT  */
+#line 4363 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 12093 "MachineIndependent/glslang_tab.cpp"
+#line 12207 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 668: /* spirv_decorate_parameter: UINTCONSTANT  */
-#line 4329 "MachineIndependent/glslang.y"
+  case 674: /* spirv_decorate_parameter: UINTCONSTANT  */
+#line 4366 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 12101 "MachineIndependent/glslang_tab.cpp"
+#line 12215 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 669: /* spirv_decorate_parameter: BOOLCONSTANT  */
-#line 4332 "MachineIndependent/glslang.y"
+  case 675: /* spirv_decorate_parameter: BOOLCONSTANT  */
+#line 4369 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 12109 "MachineIndependent/glslang_tab.cpp"
+#line 12223 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 670: /* spirv_decorate_id_parameter_list: constant_expression  */
-#line 4337 "MachineIndependent/glslang.y"
+  case 676: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter  */
+#line 4374 "MachineIndependent/glslang.y"
+                                  {
+        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
+    }
+#line 12231 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 677: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter  */
+#line 4377 "MachineIndependent/glslang.y"
+                                                                         {
+        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
+    }
+#line 12239 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 678: /* spirv_decorate_id_parameter: variable_identifier  */
+#line 4382 "MachineIndependent/glslang.y"
                           {
-        if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
-            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
-            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint &&
-            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool)
-            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));
+        if ((yyvsp[0].interm.intermTypedNode)->getAsConstantUnion() || (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode())
+            (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
+        else
+            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "only allow constants or variables which are not elements of a composite", "", "");
     }
-#line 12122 "MachineIndependent/glslang_tab.cpp"
+#line 12250 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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 &&
-            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint &&
-            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool)
-            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));
+  case 679: /* spirv_decorate_id_parameter: FLOATCONSTANT  */
+#line 4388 "MachineIndependent/glslang.y"
+                    {
+        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12135 "MachineIndependent/glslang_tab.cpp"
+#line 12258 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 672: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
-#line 4355 "MachineIndependent/glslang.y"
+  case 680: /* spirv_decorate_id_parameter: INTCONSTANT  */
+#line 4391 "MachineIndependent/glslang.y"
+                  {
+        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
+    }
+#line 12266 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 681: /* spirv_decorate_id_parameter: UINTCONSTANT  */
+#line 4394 "MachineIndependent/glslang.y"
+                   {
+        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
+    }
+#line 12274 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 682: /* spirv_decorate_id_parameter: BOOLCONSTANT  */
+#line 4397 "MachineIndependent/glslang.y"
+                   {
+        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
+    }
+#line 12282 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 683: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
+#line 4402 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
             parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 12144 "MachineIndependent/glslang_tab.cpp"
+#line 12291 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 673: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
-#line 4359 "MachineIndependent/glslang.y"
+  case 684: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
+#line 4406 "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 12152 "MachineIndependent/glslang_tab.cpp"
+#line 12299 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 685: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4411 "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 12161 "MachineIndependent/glslang_tab.cpp"
+#line 12308 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  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"
+  case 686: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4415 "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 12171 "MachineIndependent/glslang_tab.cpp"
+#line 12318 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 676: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4373 "MachineIndependent/glslang.y"
+  case 687: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4420 "MachineIndependent/glslang.y"
                                                                          {
         (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
     }
-#line 12180 "MachineIndependent/glslang_tab.cpp"
+#line 12327 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 677: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4377 "MachineIndependent/glslang.y"
+  case 688: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4424 "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 12190 "MachineIndependent/glslang_tab.cpp"
+#line 12337 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 678: /* spirv_type_parameter_list: spirv_type_parameter  */
-#line 4384 "MachineIndependent/glslang.y"
+  case 689: /* spirv_type_parameter_list: spirv_type_parameter  */
+#line 4431 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
     }
-#line 12198 "MachineIndependent/glslang_tab.cpp"
+#line 12345 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 679: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
-#line 4387 "MachineIndependent/glslang.y"
+  case 690: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
+#line 4434 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
     }
-#line 12206 "MachineIndependent/glslang_tab.cpp"
+#line 12353 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 680: /* spirv_type_parameter: constant_expression  */
-#line 4392 "MachineIndependent/glslang.y"
+  case 691: /* spirv_type_parameter: constant_expression  */
+#line 4439 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
     }
-#line 12214 "MachineIndependent/glslang_tab.cpp"
+#line 12361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 681: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4397 "MachineIndependent/glslang.y"
+  case 692: /* spirv_type_parameter: type_specifier_nonarray  */
+#line 4442 "MachineIndependent/glslang.y"
+                              {
+        (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
+    }
+#line 12369 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 693: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4447 "MachineIndependent/glslang.y"
                                                                                 {
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12222 "MachineIndependent/glslang_tab.cpp"
+#line 12377 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 682: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4400 "MachineIndependent/glslang.y"
+  case 694: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4450 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12231 "MachineIndependent/glslang_tab.cpp"
+#line 12386 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 683: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
-#line 4406 "MachineIndependent/glslang.y"
+  case 695: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
+#line 4456 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
     }
-#line 12239 "MachineIndependent/glslang_tab.cpp"
+#line 12394 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 684: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
-#line 4409 "MachineIndependent/glslang.y"
+  case 696: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
+#line 4459 "MachineIndependent/glslang.y"
                                                                             {
         (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
     }
-#line 12247 "MachineIndependent/glslang_tab.cpp"
+#line 12402 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 685: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
-#line 4414 "MachineIndependent/glslang.y"
+  case 697: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
+#line 4464 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
     }
-#line 12255 "MachineIndependent/glslang_tab.cpp"
+#line 12410 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 686: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
-#line 4417 "MachineIndependent/glslang.y"
+  case 698: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
+#line 4467 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
     }
-#line 12263 "MachineIndependent/glslang_tab.cpp"
+#line 12418 "MachineIndependent/glslang_tab.cpp"
     break;
 
 
-#line 12267 "MachineIndependent/glslang_tab.cpp"
+#line 12422 "MachineIndependent/glslang_tab.cpp"
 
       default: break;
     }
@@ -12488,5 +12643,5 @@
   return yyresult;
 }
 
-#line 4422 "MachineIndependent/glslang.y"
+#line 4472 "MachineIndependent/glslang.y"
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index 18cef46..d2dd5e3 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -217,298 +217,304 @@
     FCOOPMATNV = 418,              /* FCOOPMATNV  */
     ICOOPMATNV = 419,              /* ICOOPMATNV  */
     UCOOPMATNV = 420,              /* UCOOPMATNV  */
-    SAMPLERCUBEARRAY = 421,        /* SAMPLERCUBEARRAY  */
-    SAMPLERCUBEARRAYSHADOW = 422,  /* SAMPLERCUBEARRAYSHADOW  */
-    ISAMPLERCUBEARRAY = 423,       /* ISAMPLERCUBEARRAY  */
-    USAMPLERCUBEARRAY = 424,       /* USAMPLERCUBEARRAY  */
-    SAMPLER1D = 425,               /* SAMPLER1D  */
-    SAMPLER1DARRAY = 426,          /* SAMPLER1DARRAY  */
-    SAMPLER1DARRAYSHADOW = 427,    /* SAMPLER1DARRAYSHADOW  */
-    ISAMPLER1D = 428,              /* ISAMPLER1D  */
-    SAMPLER1DSHADOW = 429,         /* SAMPLER1DSHADOW  */
-    SAMPLER2DRECT = 430,           /* SAMPLER2DRECT  */
-    SAMPLER2DRECTSHADOW = 431,     /* SAMPLER2DRECTSHADOW  */
-    ISAMPLER2DRECT = 432,          /* ISAMPLER2DRECT  */
-    USAMPLER2DRECT = 433,          /* USAMPLER2DRECT  */
-    SAMPLERBUFFER = 434,           /* SAMPLERBUFFER  */
-    ISAMPLERBUFFER = 435,          /* ISAMPLERBUFFER  */
-    USAMPLERBUFFER = 436,          /* USAMPLERBUFFER  */
-    SAMPLER2DMS = 437,             /* SAMPLER2DMS  */
-    ISAMPLER2DMS = 438,            /* ISAMPLER2DMS  */
-    USAMPLER2DMS = 439,            /* USAMPLER2DMS  */
-    SAMPLER2DMSARRAY = 440,        /* SAMPLER2DMSARRAY  */
-    ISAMPLER2DMSARRAY = 441,       /* ISAMPLER2DMSARRAY  */
-    USAMPLER2DMSARRAY = 442,       /* USAMPLER2DMSARRAY  */
-    SAMPLEREXTERNALOES = 443,      /* SAMPLEREXTERNALOES  */
-    SAMPLEREXTERNAL2DY2YEXT = 444, /* SAMPLEREXTERNAL2DY2YEXT  */
-    ISAMPLER1DARRAY = 445,         /* ISAMPLER1DARRAY  */
-    USAMPLER1D = 446,              /* USAMPLER1D  */
-    USAMPLER1DARRAY = 447,         /* USAMPLER1DARRAY  */
-    F16SAMPLER1D = 448,            /* F16SAMPLER1D  */
-    F16SAMPLER2D = 449,            /* F16SAMPLER2D  */
-    F16SAMPLER3D = 450,            /* F16SAMPLER3D  */
-    F16SAMPLER2DRECT = 451,        /* F16SAMPLER2DRECT  */
-    F16SAMPLERCUBE = 452,          /* F16SAMPLERCUBE  */
-    F16SAMPLER1DARRAY = 453,       /* F16SAMPLER1DARRAY  */
-    F16SAMPLER2DARRAY = 454,       /* F16SAMPLER2DARRAY  */
-    F16SAMPLERCUBEARRAY = 455,     /* F16SAMPLERCUBEARRAY  */
-    F16SAMPLERBUFFER = 456,        /* F16SAMPLERBUFFER  */
-    F16SAMPLER2DMS = 457,          /* F16SAMPLER2DMS  */
-    F16SAMPLER2DMSARRAY = 458,     /* F16SAMPLER2DMSARRAY  */
-    F16SAMPLER1DSHADOW = 459,      /* F16SAMPLER1DSHADOW  */
-    F16SAMPLER2DSHADOW = 460,      /* F16SAMPLER2DSHADOW  */
-    F16SAMPLER1DARRAYSHADOW = 461, /* F16SAMPLER1DARRAYSHADOW  */
-    F16SAMPLER2DARRAYSHADOW = 462, /* F16SAMPLER2DARRAYSHADOW  */
-    F16SAMPLER2DRECTSHADOW = 463,  /* F16SAMPLER2DRECTSHADOW  */
-    F16SAMPLERCUBESHADOW = 464,    /* F16SAMPLERCUBESHADOW  */
-    F16SAMPLERCUBEARRAYSHADOW = 465, /* F16SAMPLERCUBEARRAYSHADOW  */
-    IMAGE1D = 466,                 /* IMAGE1D  */
-    IIMAGE1D = 467,                /* IIMAGE1D  */
-    UIMAGE1D = 468,                /* UIMAGE1D  */
-    IMAGE2D = 469,                 /* IMAGE2D  */
-    IIMAGE2D = 470,                /* IIMAGE2D  */
-    UIMAGE2D = 471,                /* UIMAGE2D  */
-    IMAGE3D = 472,                 /* IMAGE3D  */
-    IIMAGE3D = 473,                /* IIMAGE3D  */
-    UIMAGE3D = 474,                /* UIMAGE3D  */
-    IMAGE2DRECT = 475,             /* IMAGE2DRECT  */
-    IIMAGE2DRECT = 476,            /* IIMAGE2DRECT  */
-    UIMAGE2DRECT = 477,            /* UIMAGE2DRECT  */
-    IMAGECUBE = 478,               /* IMAGECUBE  */
-    IIMAGECUBE = 479,              /* IIMAGECUBE  */
-    UIMAGECUBE = 480,              /* UIMAGECUBE  */
-    IMAGEBUFFER = 481,             /* IMAGEBUFFER  */
-    IIMAGEBUFFER = 482,            /* IIMAGEBUFFER  */
-    UIMAGEBUFFER = 483,            /* UIMAGEBUFFER  */
-    IMAGE1DARRAY = 484,            /* IMAGE1DARRAY  */
-    IIMAGE1DARRAY = 485,           /* IIMAGE1DARRAY  */
-    UIMAGE1DARRAY = 486,           /* UIMAGE1DARRAY  */
-    IMAGE2DARRAY = 487,            /* IMAGE2DARRAY  */
-    IIMAGE2DARRAY = 488,           /* IIMAGE2DARRAY  */
-    UIMAGE2DARRAY = 489,           /* UIMAGE2DARRAY  */
-    IMAGECUBEARRAY = 490,          /* IMAGECUBEARRAY  */
-    IIMAGECUBEARRAY = 491,         /* IIMAGECUBEARRAY  */
-    UIMAGECUBEARRAY = 492,         /* UIMAGECUBEARRAY  */
-    IMAGE2DMS = 493,               /* IMAGE2DMS  */
-    IIMAGE2DMS = 494,              /* IIMAGE2DMS  */
-    UIMAGE2DMS = 495,              /* UIMAGE2DMS  */
-    IMAGE2DMSARRAY = 496,          /* IMAGE2DMSARRAY  */
-    IIMAGE2DMSARRAY = 497,         /* IIMAGE2DMSARRAY  */
-    UIMAGE2DMSARRAY = 498,         /* UIMAGE2DMSARRAY  */
-    F16IMAGE1D = 499,              /* F16IMAGE1D  */
-    F16IMAGE2D = 500,              /* F16IMAGE2D  */
-    F16IMAGE3D = 501,              /* F16IMAGE3D  */
-    F16IMAGE2DRECT = 502,          /* F16IMAGE2DRECT  */
-    F16IMAGECUBE = 503,            /* F16IMAGECUBE  */
-    F16IMAGE1DARRAY = 504,         /* F16IMAGE1DARRAY  */
-    F16IMAGE2DARRAY = 505,         /* F16IMAGE2DARRAY  */
-    F16IMAGECUBEARRAY = 506,       /* F16IMAGECUBEARRAY  */
-    F16IMAGEBUFFER = 507,          /* F16IMAGEBUFFER  */
-    F16IMAGE2DMS = 508,            /* F16IMAGE2DMS  */
-    F16IMAGE2DMSARRAY = 509,       /* F16IMAGE2DMSARRAY  */
-    I64IMAGE1D = 510,              /* I64IMAGE1D  */
-    U64IMAGE1D = 511,              /* U64IMAGE1D  */
-    I64IMAGE2D = 512,              /* I64IMAGE2D  */
-    U64IMAGE2D = 513,              /* U64IMAGE2D  */
-    I64IMAGE3D = 514,              /* I64IMAGE3D  */
-    U64IMAGE3D = 515,              /* U64IMAGE3D  */
-    I64IMAGE2DRECT = 516,          /* I64IMAGE2DRECT  */
-    U64IMAGE2DRECT = 517,          /* U64IMAGE2DRECT  */
-    I64IMAGECUBE = 518,            /* I64IMAGECUBE  */
-    U64IMAGECUBE = 519,            /* U64IMAGECUBE  */
-    I64IMAGEBUFFER = 520,          /* I64IMAGEBUFFER  */
-    U64IMAGEBUFFER = 521,          /* U64IMAGEBUFFER  */
-    I64IMAGE1DARRAY = 522,         /* I64IMAGE1DARRAY  */
-    U64IMAGE1DARRAY = 523,         /* U64IMAGE1DARRAY  */
-    I64IMAGE2DARRAY = 524,         /* I64IMAGE2DARRAY  */
-    U64IMAGE2DARRAY = 525,         /* U64IMAGE2DARRAY  */
-    I64IMAGECUBEARRAY = 526,       /* I64IMAGECUBEARRAY  */
-    U64IMAGECUBEARRAY = 527,       /* U64IMAGECUBEARRAY  */
-    I64IMAGE2DMS = 528,            /* I64IMAGE2DMS  */
-    U64IMAGE2DMS = 529,            /* U64IMAGE2DMS  */
-    I64IMAGE2DMSARRAY = 530,       /* I64IMAGE2DMSARRAY  */
-    U64IMAGE2DMSARRAY = 531,       /* U64IMAGE2DMSARRAY  */
-    TEXTURECUBEARRAY = 532,        /* TEXTURECUBEARRAY  */
-    ITEXTURECUBEARRAY = 533,       /* ITEXTURECUBEARRAY  */
-    UTEXTURECUBEARRAY = 534,       /* UTEXTURECUBEARRAY  */
-    TEXTURE1D = 535,               /* TEXTURE1D  */
-    ITEXTURE1D = 536,              /* ITEXTURE1D  */
-    UTEXTURE1D = 537,              /* UTEXTURE1D  */
-    TEXTURE1DARRAY = 538,          /* TEXTURE1DARRAY  */
-    ITEXTURE1DARRAY = 539,         /* ITEXTURE1DARRAY  */
-    UTEXTURE1DARRAY = 540,         /* UTEXTURE1DARRAY  */
-    TEXTURE2DRECT = 541,           /* TEXTURE2DRECT  */
-    ITEXTURE2DRECT = 542,          /* ITEXTURE2DRECT  */
-    UTEXTURE2DRECT = 543,          /* UTEXTURE2DRECT  */
-    TEXTUREBUFFER = 544,           /* TEXTUREBUFFER  */
-    ITEXTUREBUFFER = 545,          /* ITEXTUREBUFFER  */
-    UTEXTUREBUFFER = 546,          /* UTEXTUREBUFFER  */
-    TEXTURE2DMS = 547,             /* TEXTURE2DMS  */
-    ITEXTURE2DMS = 548,            /* ITEXTURE2DMS  */
-    UTEXTURE2DMS = 549,            /* UTEXTURE2DMS  */
-    TEXTURE2DMSARRAY = 550,        /* TEXTURE2DMSARRAY  */
-    ITEXTURE2DMSARRAY = 551,       /* ITEXTURE2DMSARRAY  */
-    UTEXTURE2DMSARRAY = 552,       /* UTEXTURE2DMSARRAY  */
-    F16TEXTURE1D = 553,            /* F16TEXTURE1D  */
-    F16TEXTURE2D = 554,            /* F16TEXTURE2D  */
-    F16TEXTURE3D = 555,            /* F16TEXTURE3D  */
-    F16TEXTURE2DRECT = 556,        /* F16TEXTURE2DRECT  */
-    F16TEXTURECUBE = 557,          /* F16TEXTURECUBE  */
-    F16TEXTURE1DARRAY = 558,       /* F16TEXTURE1DARRAY  */
-    F16TEXTURE2DARRAY = 559,       /* F16TEXTURE2DARRAY  */
-    F16TEXTURECUBEARRAY = 560,     /* F16TEXTURECUBEARRAY  */
-    F16TEXTUREBUFFER = 561,        /* F16TEXTUREBUFFER  */
-    F16TEXTURE2DMS = 562,          /* F16TEXTURE2DMS  */
-    F16TEXTURE2DMSARRAY = 563,     /* F16TEXTURE2DMSARRAY  */
-    SUBPASSINPUT = 564,            /* SUBPASSINPUT  */
-    SUBPASSINPUTMS = 565,          /* SUBPASSINPUTMS  */
-    ISUBPASSINPUT = 566,           /* ISUBPASSINPUT  */
-    ISUBPASSINPUTMS = 567,         /* ISUBPASSINPUTMS  */
-    USUBPASSINPUT = 568,           /* USUBPASSINPUT  */
-    USUBPASSINPUTMS = 569,         /* USUBPASSINPUTMS  */
-    F16SUBPASSINPUT = 570,         /* F16SUBPASSINPUT  */
-    F16SUBPASSINPUTMS = 571,       /* F16SUBPASSINPUTMS  */
-    SPIRV_INSTRUCTION = 572,       /* SPIRV_INSTRUCTION  */
-    SPIRV_EXECUTION_MODE = 573,    /* SPIRV_EXECUTION_MODE  */
-    SPIRV_EXECUTION_MODE_ID = 574, /* SPIRV_EXECUTION_MODE_ID  */
-    SPIRV_DECORATE = 575,          /* SPIRV_DECORATE  */
-    SPIRV_DECORATE_ID = 576,       /* SPIRV_DECORATE_ID  */
-    SPIRV_DECORATE_STRING = 577,   /* SPIRV_DECORATE_STRING  */
-    SPIRV_TYPE = 578,              /* SPIRV_TYPE  */
-    SPIRV_STORAGE_CLASS = 579,     /* SPIRV_STORAGE_CLASS  */
-    SPIRV_BY_REFERENCE = 580,      /* SPIRV_BY_REFERENCE  */
-    SPIRV_LITERAL = 581,           /* SPIRV_LITERAL  */
-    LEFT_OP = 582,                 /* LEFT_OP  */
-    RIGHT_OP = 583,                /* RIGHT_OP  */
-    INC_OP = 584,                  /* INC_OP  */
-    DEC_OP = 585,                  /* DEC_OP  */
-    LE_OP = 586,                   /* LE_OP  */
-    GE_OP = 587,                   /* GE_OP  */
-    EQ_OP = 588,                   /* EQ_OP  */
-    NE_OP = 589,                   /* NE_OP  */
-    AND_OP = 590,                  /* AND_OP  */
-    OR_OP = 591,                   /* OR_OP  */
-    XOR_OP = 592,                  /* XOR_OP  */
-    MUL_ASSIGN = 593,              /* MUL_ASSIGN  */
-    DIV_ASSIGN = 594,              /* DIV_ASSIGN  */
-    ADD_ASSIGN = 595,              /* ADD_ASSIGN  */
-    MOD_ASSIGN = 596,              /* MOD_ASSIGN  */
-    LEFT_ASSIGN = 597,             /* LEFT_ASSIGN  */
-    RIGHT_ASSIGN = 598,            /* RIGHT_ASSIGN  */
-    AND_ASSIGN = 599,              /* AND_ASSIGN  */
-    XOR_ASSIGN = 600,              /* XOR_ASSIGN  */
-    OR_ASSIGN = 601,               /* OR_ASSIGN  */
-    SUB_ASSIGN = 602,              /* SUB_ASSIGN  */
-    STRING_LITERAL = 603,          /* STRING_LITERAL  */
-    LEFT_PAREN = 604,              /* LEFT_PAREN  */
-    RIGHT_PAREN = 605,             /* RIGHT_PAREN  */
-    LEFT_BRACKET = 606,            /* LEFT_BRACKET  */
-    RIGHT_BRACKET = 607,           /* RIGHT_BRACKET  */
-    LEFT_BRACE = 608,              /* LEFT_BRACE  */
-    RIGHT_BRACE = 609,             /* RIGHT_BRACE  */
-    DOT = 610,                     /* DOT  */
-    COMMA = 611,                   /* COMMA  */
-    COLON = 612,                   /* COLON  */
-    EQUAL = 613,                   /* EQUAL  */
-    SEMICOLON = 614,               /* SEMICOLON  */
-    BANG = 615,                    /* BANG  */
-    DASH = 616,                    /* DASH  */
-    TILDE = 617,                   /* TILDE  */
-    PLUS = 618,                    /* PLUS  */
-    STAR = 619,                    /* STAR  */
-    SLASH = 620,                   /* SLASH  */
-    PERCENT = 621,                 /* PERCENT  */
-    LEFT_ANGLE = 622,              /* LEFT_ANGLE  */
-    RIGHT_ANGLE = 623,             /* RIGHT_ANGLE  */
-    VERTICAL_BAR = 624,            /* VERTICAL_BAR  */
-    CARET = 625,                   /* CARET  */
-    AMPERSAND = 626,               /* AMPERSAND  */
-    QUESTION = 627,                /* QUESTION  */
-    INVARIANT = 628,               /* INVARIANT  */
-    HIGH_PRECISION = 629,          /* HIGH_PRECISION  */
-    MEDIUM_PRECISION = 630,        /* MEDIUM_PRECISION  */
-    LOW_PRECISION = 631,           /* LOW_PRECISION  */
-    PRECISION = 632,               /* PRECISION  */
-    PACKED = 633,                  /* PACKED  */
-    RESOURCE = 634,                /* RESOURCE  */
-    SUPERP = 635,                  /* SUPERP  */
-    FLOATCONSTANT = 636,           /* FLOATCONSTANT  */
-    INTCONSTANT = 637,             /* INTCONSTANT  */
-    UINTCONSTANT = 638,            /* UINTCONSTANT  */
-    BOOLCONSTANT = 639,            /* BOOLCONSTANT  */
-    IDENTIFIER = 640,              /* IDENTIFIER  */
-    TYPE_NAME = 641,               /* TYPE_NAME  */
-    CENTROID = 642,                /* CENTROID  */
-    IN = 643,                      /* IN  */
-    OUT = 644,                     /* OUT  */
-    INOUT = 645,                   /* INOUT  */
-    STRUCT = 646,                  /* STRUCT  */
-    VOID = 647,                    /* VOID  */
-    WHILE = 648,                   /* WHILE  */
-    BREAK = 649,                   /* BREAK  */
-    CONTINUE = 650,                /* CONTINUE  */
-    DO = 651,                      /* DO  */
-    ELSE = 652,                    /* ELSE  */
-    FOR = 653,                     /* FOR  */
-    IF = 654,                      /* IF  */
-    DISCARD = 655,                 /* DISCARD  */
-    RETURN = 656,                  /* RETURN  */
-    SWITCH = 657,                  /* SWITCH  */
-    CASE = 658,                    /* CASE  */
-    DEFAULT = 659,                 /* DEFAULT  */
-    TERMINATE_INVOCATION = 660,    /* TERMINATE_INVOCATION  */
-    TERMINATE_RAY = 661,           /* TERMINATE_RAY  */
-    IGNORE_INTERSECTION = 662,     /* IGNORE_INTERSECTION  */
-    UNIFORM = 663,                 /* UNIFORM  */
-    SHARED = 664,                  /* SHARED  */
-    BUFFER = 665,                  /* BUFFER  */
-    FLAT = 666,                    /* FLAT  */
-    SMOOTH = 667,                  /* SMOOTH  */
-    LAYOUT = 668,                  /* LAYOUT  */
-    DOUBLECONSTANT = 669,          /* DOUBLECONSTANT  */
-    INT16CONSTANT = 670,           /* INT16CONSTANT  */
-    UINT16CONSTANT = 671,          /* UINT16CONSTANT  */
-    FLOAT16CONSTANT = 672,         /* FLOAT16CONSTANT  */
-    INT32CONSTANT = 673,           /* INT32CONSTANT  */
-    UINT32CONSTANT = 674,          /* UINT32CONSTANT  */
-    INT64CONSTANT = 675,           /* INT64CONSTANT  */
-    UINT64CONSTANT = 676,          /* UINT64CONSTANT  */
-    SUBROUTINE = 677,              /* SUBROUTINE  */
-    DEMOTE = 678,                  /* DEMOTE  */
-    PAYLOADNV = 679,               /* PAYLOADNV  */
-    PAYLOADINNV = 680,             /* PAYLOADINNV  */
-    HITATTRNV = 681,               /* HITATTRNV  */
-    CALLDATANV = 682,              /* CALLDATANV  */
-    CALLDATAINNV = 683,            /* CALLDATAINNV  */
-    PAYLOADEXT = 684,              /* PAYLOADEXT  */
-    PAYLOADINEXT = 685,            /* PAYLOADINEXT  */
-    HITATTREXT = 686,              /* HITATTREXT  */
-    CALLDATAEXT = 687,             /* CALLDATAEXT  */
-    CALLDATAINEXT = 688,           /* CALLDATAINEXT  */
-    PATCH = 689,                   /* PATCH  */
-    SAMPLE = 690,                  /* SAMPLE  */
-    NONUNIFORM = 691,              /* NONUNIFORM  */
-    COHERENT = 692,                /* COHERENT  */
-    VOLATILE = 693,                /* VOLATILE  */
-    RESTRICT = 694,                /* RESTRICT  */
-    READONLY = 695,                /* READONLY  */
-    WRITEONLY = 696,               /* WRITEONLY  */
-    DEVICECOHERENT = 697,          /* DEVICECOHERENT  */
-    QUEUEFAMILYCOHERENT = 698,     /* QUEUEFAMILYCOHERENT  */
-    WORKGROUPCOHERENT = 699,       /* WORKGROUPCOHERENT  */
-    SUBGROUPCOHERENT = 700,        /* SUBGROUPCOHERENT  */
-    NONPRIVATE = 701,              /* NONPRIVATE  */
-    SHADERCALLCOHERENT = 702,      /* SHADERCALLCOHERENT  */
-    NOPERSPECTIVE = 703,           /* NOPERSPECTIVE  */
-    EXPLICITINTERPAMD = 704,       /* EXPLICITINTERPAMD  */
-    PERVERTEXEXT = 705,            /* PERVERTEXEXT  */
-    PERVERTEXNV = 706,             /* PERVERTEXNV  */
-    PERPRIMITIVENV = 707,          /* PERPRIMITIVENV  */
-    PERVIEWNV = 708,               /* PERVIEWNV  */
-    PERTASKNV = 709,               /* PERTASKNV  */
-    PERPRIMITIVEEXT = 710,         /* PERPRIMITIVEEXT  */
-    TASKPAYLOADWORKGROUPEXT = 711, /* TASKPAYLOADWORKGROUPEXT  */
-    PRECISE = 712                  /* PRECISE  */
+    HITOBJECTNV = 421,             /* HITOBJECTNV  */
+    HITOBJECTATTRNV = 422,         /* HITOBJECTATTRNV  */
+    SAMPLERCUBEARRAY = 423,        /* SAMPLERCUBEARRAY  */
+    SAMPLERCUBEARRAYSHADOW = 424,  /* SAMPLERCUBEARRAYSHADOW  */
+    ISAMPLERCUBEARRAY = 425,       /* ISAMPLERCUBEARRAY  */
+    USAMPLERCUBEARRAY = 426,       /* USAMPLERCUBEARRAY  */
+    SAMPLER1D = 427,               /* SAMPLER1D  */
+    SAMPLER1DARRAY = 428,          /* SAMPLER1DARRAY  */
+    SAMPLER1DARRAYSHADOW = 429,    /* SAMPLER1DARRAYSHADOW  */
+    ISAMPLER1D = 430,              /* ISAMPLER1D  */
+    SAMPLER1DSHADOW = 431,         /* SAMPLER1DSHADOW  */
+    SAMPLER2DRECT = 432,           /* SAMPLER2DRECT  */
+    SAMPLER2DRECTSHADOW = 433,     /* SAMPLER2DRECTSHADOW  */
+    ISAMPLER2DRECT = 434,          /* ISAMPLER2DRECT  */
+    USAMPLER2DRECT = 435,          /* USAMPLER2DRECT  */
+    SAMPLERBUFFER = 436,           /* SAMPLERBUFFER  */
+    ISAMPLERBUFFER = 437,          /* ISAMPLERBUFFER  */
+    USAMPLERBUFFER = 438,          /* USAMPLERBUFFER  */
+    SAMPLER2DMS = 439,             /* SAMPLER2DMS  */
+    ISAMPLER2DMS = 440,            /* ISAMPLER2DMS  */
+    USAMPLER2DMS = 441,            /* USAMPLER2DMS  */
+    SAMPLER2DMSARRAY = 442,        /* SAMPLER2DMSARRAY  */
+    ISAMPLER2DMSARRAY = 443,       /* ISAMPLER2DMSARRAY  */
+    USAMPLER2DMSARRAY = 444,       /* USAMPLER2DMSARRAY  */
+    SAMPLEREXTERNALOES = 445,      /* SAMPLEREXTERNALOES  */
+    SAMPLEREXTERNAL2DY2YEXT = 446, /* SAMPLEREXTERNAL2DY2YEXT  */
+    ISAMPLER1DARRAY = 447,         /* ISAMPLER1DARRAY  */
+    USAMPLER1D = 448,              /* USAMPLER1D  */
+    USAMPLER1DARRAY = 449,         /* USAMPLER1DARRAY  */
+    F16SAMPLER1D = 450,            /* F16SAMPLER1D  */
+    F16SAMPLER2D = 451,            /* F16SAMPLER2D  */
+    F16SAMPLER3D = 452,            /* F16SAMPLER3D  */
+    F16SAMPLER2DRECT = 453,        /* F16SAMPLER2DRECT  */
+    F16SAMPLERCUBE = 454,          /* F16SAMPLERCUBE  */
+    F16SAMPLER1DARRAY = 455,       /* F16SAMPLER1DARRAY  */
+    F16SAMPLER2DARRAY = 456,       /* F16SAMPLER2DARRAY  */
+    F16SAMPLERCUBEARRAY = 457,     /* F16SAMPLERCUBEARRAY  */
+    F16SAMPLERBUFFER = 458,        /* F16SAMPLERBUFFER  */
+    F16SAMPLER2DMS = 459,          /* F16SAMPLER2DMS  */
+    F16SAMPLER2DMSARRAY = 460,     /* F16SAMPLER2DMSARRAY  */
+    F16SAMPLER1DSHADOW = 461,      /* F16SAMPLER1DSHADOW  */
+    F16SAMPLER2DSHADOW = 462,      /* F16SAMPLER2DSHADOW  */
+    F16SAMPLER1DARRAYSHADOW = 463, /* F16SAMPLER1DARRAYSHADOW  */
+    F16SAMPLER2DARRAYSHADOW = 464, /* F16SAMPLER2DARRAYSHADOW  */
+    F16SAMPLER2DRECTSHADOW = 465,  /* F16SAMPLER2DRECTSHADOW  */
+    F16SAMPLERCUBESHADOW = 466,    /* F16SAMPLERCUBESHADOW  */
+    F16SAMPLERCUBEARRAYSHADOW = 467, /* F16SAMPLERCUBEARRAYSHADOW  */
+    IMAGE1D = 468,                 /* IMAGE1D  */
+    IIMAGE1D = 469,                /* IIMAGE1D  */
+    UIMAGE1D = 470,                /* UIMAGE1D  */
+    IMAGE2D = 471,                 /* IMAGE2D  */
+    IIMAGE2D = 472,                /* IIMAGE2D  */
+    UIMAGE2D = 473,                /* UIMAGE2D  */
+    IMAGE3D = 474,                 /* IMAGE3D  */
+    IIMAGE3D = 475,                /* IIMAGE3D  */
+    UIMAGE3D = 476,                /* UIMAGE3D  */
+    IMAGE2DRECT = 477,             /* IMAGE2DRECT  */
+    IIMAGE2DRECT = 478,            /* IIMAGE2DRECT  */
+    UIMAGE2DRECT = 479,            /* UIMAGE2DRECT  */
+    IMAGECUBE = 480,               /* IMAGECUBE  */
+    IIMAGECUBE = 481,              /* IIMAGECUBE  */
+    UIMAGECUBE = 482,              /* UIMAGECUBE  */
+    IMAGEBUFFER = 483,             /* IMAGEBUFFER  */
+    IIMAGEBUFFER = 484,            /* IIMAGEBUFFER  */
+    UIMAGEBUFFER = 485,            /* UIMAGEBUFFER  */
+    IMAGE1DARRAY = 486,            /* IMAGE1DARRAY  */
+    IIMAGE1DARRAY = 487,           /* IIMAGE1DARRAY  */
+    UIMAGE1DARRAY = 488,           /* UIMAGE1DARRAY  */
+    IMAGE2DARRAY = 489,            /* IMAGE2DARRAY  */
+    IIMAGE2DARRAY = 490,           /* IIMAGE2DARRAY  */
+    UIMAGE2DARRAY = 491,           /* UIMAGE2DARRAY  */
+    IMAGECUBEARRAY = 492,          /* IMAGECUBEARRAY  */
+    IIMAGECUBEARRAY = 493,         /* IIMAGECUBEARRAY  */
+    UIMAGECUBEARRAY = 494,         /* UIMAGECUBEARRAY  */
+    IMAGE2DMS = 495,               /* IMAGE2DMS  */
+    IIMAGE2DMS = 496,              /* IIMAGE2DMS  */
+    UIMAGE2DMS = 497,              /* UIMAGE2DMS  */
+    IMAGE2DMSARRAY = 498,          /* IMAGE2DMSARRAY  */
+    IIMAGE2DMSARRAY = 499,         /* IIMAGE2DMSARRAY  */
+    UIMAGE2DMSARRAY = 500,         /* UIMAGE2DMSARRAY  */
+    F16IMAGE1D = 501,              /* F16IMAGE1D  */
+    F16IMAGE2D = 502,              /* F16IMAGE2D  */
+    F16IMAGE3D = 503,              /* F16IMAGE3D  */
+    F16IMAGE2DRECT = 504,          /* F16IMAGE2DRECT  */
+    F16IMAGECUBE = 505,            /* F16IMAGECUBE  */
+    F16IMAGE1DARRAY = 506,         /* F16IMAGE1DARRAY  */
+    F16IMAGE2DARRAY = 507,         /* F16IMAGE2DARRAY  */
+    F16IMAGECUBEARRAY = 508,       /* F16IMAGECUBEARRAY  */
+    F16IMAGEBUFFER = 509,          /* F16IMAGEBUFFER  */
+    F16IMAGE2DMS = 510,            /* F16IMAGE2DMS  */
+    F16IMAGE2DMSARRAY = 511,       /* F16IMAGE2DMSARRAY  */
+    I64IMAGE1D = 512,              /* I64IMAGE1D  */
+    U64IMAGE1D = 513,              /* U64IMAGE1D  */
+    I64IMAGE2D = 514,              /* I64IMAGE2D  */
+    U64IMAGE2D = 515,              /* U64IMAGE2D  */
+    I64IMAGE3D = 516,              /* I64IMAGE3D  */
+    U64IMAGE3D = 517,              /* U64IMAGE3D  */
+    I64IMAGE2DRECT = 518,          /* I64IMAGE2DRECT  */
+    U64IMAGE2DRECT = 519,          /* U64IMAGE2DRECT  */
+    I64IMAGECUBE = 520,            /* I64IMAGECUBE  */
+    U64IMAGECUBE = 521,            /* U64IMAGECUBE  */
+    I64IMAGEBUFFER = 522,          /* I64IMAGEBUFFER  */
+    U64IMAGEBUFFER = 523,          /* U64IMAGEBUFFER  */
+    I64IMAGE1DARRAY = 524,         /* I64IMAGE1DARRAY  */
+    U64IMAGE1DARRAY = 525,         /* U64IMAGE1DARRAY  */
+    I64IMAGE2DARRAY = 526,         /* I64IMAGE2DARRAY  */
+    U64IMAGE2DARRAY = 527,         /* U64IMAGE2DARRAY  */
+    I64IMAGECUBEARRAY = 528,       /* I64IMAGECUBEARRAY  */
+    U64IMAGECUBEARRAY = 529,       /* U64IMAGECUBEARRAY  */
+    I64IMAGE2DMS = 530,            /* I64IMAGE2DMS  */
+    U64IMAGE2DMS = 531,            /* U64IMAGE2DMS  */
+    I64IMAGE2DMSARRAY = 532,       /* I64IMAGE2DMSARRAY  */
+    U64IMAGE2DMSARRAY = 533,       /* U64IMAGE2DMSARRAY  */
+    TEXTURECUBEARRAY = 534,        /* TEXTURECUBEARRAY  */
+    ITEXTURECUBEARRAY = 535,       /* ITEXTURECUBEARRAY  */
+    UTEXTURECUBEARRAY = 536,       /* UTEXTURECUBEARRAY  */
+    TEXTURE1D = 537,               /* TEXTURE1D  */
+    ITEXTURE1D = 538,              /* ITEXTURE1D  */
+    UTEXTURE1D = 539,              /* UTEXTURE1D  */
+    TEXTURE1DARRAY = 540,          /* TEXTURE1DARRAY  */
+    ITEXTURE1DARRAY = 541,         /* ITEXTURE1DARRAY  */
+    UTEXTURE1DARRAY = 542,         /* UTEXTURE1DARRAY  */
+    TEXTURE2DRECT = 543,           /* TEXTURE2DRECT  */
+    ITEXTURE2DRECT = 544,          /* ITEXTURE2DRECT  */
+    UTEXTURE2DRECT = 545,          /* UTEXTURE2DRECT  */
+    TEXTUREBUFFER = 546,           /* TEXTUREBUFFER  */
+    ITEXTUREBUFFER = 547,          /* ITEXTUREBUFFER  */
+    UTEXTUREBUFFER = 548,          /* UTEXTUREBUFFER  */
+    TEXTURE2DMS = 549,             /* TEXTURE2DMS  */
+    ITEXTURE2DMS = 550,            /* ITEXTURE2DMS  */
+    UTEXTURE2DMS = 551,            /* UTEXTURE2DMS  */
+    TEXTURE2DMSARRAY = 552,        /* TEXTURE2DMSARRAY  */
+    ITEXTURE2DMSARRAY = 553,       /* ITEXTURE2DMSARRAY  */
+    UTEXTURE2DMSARRAY = 554,       /* UTEXTURE2DMSARRAY  */
+    F16TEXTURE1D = 555,            /* F16TEXTURE1D  */
+    F16TEXTURE2D = 556,            /* F16TEXTURE2D  */
+    F16TEXTURE3D = 557,            /* F16TEXTURE3D  */
+    F16TEXTURE2DRECT = 558,        /* F16TEXTURE2DRECT  */
+    F16TEXTURECUBE = 559,          /* F16TEXTURECUBE  */
+    F16TEXTURE1DARRAY = 560,       /* F16TEXTURE1DARRAY  */
+    F16TEXTURE2DARRAY = 561,       /* F16TEXTURE2DARRAY  */
+    F16TEXTURECUBEARRAY = 562,     /* F16TEXTURECUBEARRAY  */
+    F16TEXTUREBUFFER = 563,        /* F16TEXTUREBUFFER  */
+    F16TEXTURE2DMS = 564,          /* F16TEXTURE2DMS  */
+    F16TEXTURE2DMSARRAY = 565,     /* F16TEXTURE2DMSARRAY  */
+    SUBPASSINPUT = 566,            /* SUBPASSINPUT  */
+    SUBPASSINPUTMS = 567,          /* SUBPASSINPUTMS  */
+    ISUBPASSINPUT = 568,           /* ISUBPASSINPUT  */
+    ISUBPASSINPUTMS = 569,         /* ISUBPASSINPUTMS  */
+    USUBPASSINPUT = 570,           /* USUBPASSINPUT  */
+    USUBPASSINPUTMS = 571,         /* USUBPASSINPUTMS  */
+    F16SUBPASSINPUT = 572,         /* F16SUBPASSINPUT  */
+    F16SUBPASSINPUTMS = 573,       /* F16SUBPASSINPUTMS  */
+    SPIRV_INSTRUCTION = 574,       /* SPIRV_INSTRUCTION  */
+    SPIRV_EXECUTION_MODE = 575,    /* SPIRV_EXECUTION_MODE  */
+    SPIRV_EXECUTION_MODE_ID = 576, /* SPIRV_EXECUTION_MODE_ID  */
+    SPIRV_DECORATE = 577,          /* SPIRV_DECORATE  */
+    SPIRV_DECORATE_ID = 578,       /* SPIRV_DECORATE_ID  */
+    SPIRV_DECORATE_STRING = 579,   /* SPIRV_DECORATE_STRING  */
+    SPIRV_TYPE = 580,              /* SPIRV_TYPE  */
+    SPIRV_STORAGE_CLASS = 581,     /* SPIRV_STORAGE_CLASS  */
+    SPIRV_BY_REFERENCE = 582,      /* SPIRV_BY_REFERENCE  */
+    SPIRV_LITERAL = 583,           /* SPIRV_LITERAL  */
+    ATTACHMENTEXT = 584,           /* ATTACHMENTEXT  */
+    IATTACHMENTEXT = 585,          /* IATTACHMENTEXT  */
+    UATTACHMENTEXT = 586,          /* UATTACHMENTEXT  */
+    LEFT_OP = 587,                 /* LEFT_OP  */
+    RIGHT_OP = 588,                /* RIGHT_OP  */
+    INC_OP = 589,                  /* INC_OP  */
+    DEC_OP = 590,                  /* DEC_OP  */
+    LE_OP = 591,                   /* LE_OP  */
+    GE_OP = 592,                   /* GE_OP  */
+    EQ_OP = 593,                   /* EQ_OP  */
+    NE_OP = 594,                   /* NE_OP  */
+    AND_OP = 595,                  /* AND_OP  */
+    OR_OP = 596,                   /* OR_OP  */
+    XOR_OP = 597,                  /* XOR_OP  */
+    MUL_ASSIGN = 598,              /* MUL_ASSIGN  */
+    DIV_ASSIGN = 599,              /* DIV_ASSIGN  */
+    ADD_ASSIGN = 600,              /* ADD_ASSIGN  */
+    MOD_ASSIGN = 601,              /* MOD_ASSIGN  */
+    LEFT_ASSIGN = 602,             /* LEFT_ASSIGN  */
+    RIGHT_ASSIGN = 603,            /* RIGHT_ASSIGN  */
+    AND_ASSIGN = 604,              /* AND_ASSIGN  */
+    XOR_ASSIGN = 605,              /* XOR_ASSIGN  */
+    OR_ASSIGN = 606,               /* OR_ASSIGN  */
+    SUB_ASSIGN = 607,              /* SUB_ASSIGN  */
+    STRING_LITERAL = 608,          /* STRING_LITERAL  */
+    LEFT_PAREN = 609,              /* LEFT_PAREN  */
+    RIGHT_PAREN = 610,             /* RIGHT_PAREN  */
+    LEFT_BRACKET = 611,            /* LEFT_BRACKET  */
+    RIGHT_BRACKET = 612,           /* RIGHT_BRACKET  */
+    LEFT_BRACE = 613,              /* LEFT_BRACE  */
+    RIGHT_BRACE = 614,             /* RIGHT_BRACE  */
+    DOT = 615,                     /* DOT  */
+    COMMA = 616,                   /* COMMA  */
+    COLON = 617,                   /* COLON  */
+    EQUAL = 618,                   /* EQUAL  */
+    SEMICOLON = 619,               /* SEMICOLON  */
+    BANG = 620,                    /* BANG  */
+    DASH = 621,                    /* DASH  */
+    TILDE = 622,                   /* TILDE  */
+    PLUS = 623,                    /* PLUS  */
+    STAR = 624,                    /* STAR  */
+    SLASH = 625,                   /* SLASH  */
+    PERCENT = 626,                 /* PERCENT  */
+    LEFT_ANGLE = 627,              /* LEFT_ANGLE  */
+    RIGHT_ANGLE = 628,             /* RIGHT_ANGLE  */
+    VERTICAL_BAR = 629,            /* VERTICAL_BAR  */
+    CARET = 630,                   /* CARET  */
+    AMPERSAND = 631,               /* AMPERSAND  */
+    QUESTION = 632,                /* QUESTION  */
+    INVARIANT = 633,               /* INVARIANT  */
+    HIGH_PRECISION = 634,          /* HIGH_PRECISION  */
+    MEDIUM_PRECISION = 635,        /* MEDIUM_PRECISION  */
+    LOW_PRECISION = 636,           /* LOW_PRECISION  */
+    PRECISION = 637,               /* PRECISION  */
+    PACKED = 638,                  /* PACKED  */
+    RESOURCE = 639,                /* RESOURCE  */
+    SUPERP = 640,                  /* SUPERP  */
+    FLOATCONSTANT = 641,           /* FLOATCONSTANT  */
+    INTCONSTANT = 642,             /* INTCONSTANT  */
+    UINTCONSTANT = 643,            /* UINTCONSTANT  */
+    BOOLCONSTANT = 644,            /* BOOLCONSTANT  */
+    IDENTIFIER = 645,              /* IDENTIFIER  */
+    TYPE_NAME = 646,               /* TYPE_NAME  */
+    CENTROID = 647,                /* CENTROID  */
+    IN = 648,                      /* IN  */
+    OUT = 649,                     /* OUT  */
+    INOUT = 650,                   /* INOUT  */
+    STRUCT = 651,                  /* STRUCT  */
+    VOID = 652,                    /* VOID  */
+    WHILE = 653,                   /* WHILE  */
+    BREAK = 654,                   /* BREAK  */
+    CONTINUE = 655,                /* CONTINUE  */
+    DO = 656,                      /* DO  */
+    ELSE = 657,                    /* ELSE  */
+    FOR = 658,                     /* FOR  */
+    IF = 659,                      /* IF  */
+    DISCARD = 660,                 /* DISCARD  */
+    RETURN = 661,                  /* RETURN  */
+    SWITCH = 662,                  /* SWITCH  */
+    CASE = 663,                    /* CASE  */
+    DEFAULT = 664,                 /* DEFAULT  */
+    TERMINATE_INVOCATION = 665,    /* TERMINATE_INVOCATION  */
+    TERMINATE_RAY = 666,           /* TERMINATE_RAY  */
+    IGNORE_INTERSECTION = 667,     /* IGNORE_INTERSECTION  */
+    UNIFORM = 668,                 /* UNIFORM  */
+    SHARED = 669,                  /* SHARED  */
+    BUFFER = 670,                  /* BUFFER  */
+    TILEIMAGEEXT = 671,            /* TILEIMAGEEXT  */
+    FLAT = 672,                    /* FLAT  */
+    SMOOTH = 673,                  /* SMOOTH  */
+    LAYOUT = 674,                  /* LAYOUT  */
+    DOUBLECONSTANT = 675,          /* DOUBLECONSTANT  */
+    INT16CONSTANT = 676,           /* INT16CONSTANT  */
+    UINT16CONSTANT = 677,          /* UINT16CONSTANT  */
+    FLOAT16CONSTANT = 678,         /* FLOAT16CONSTANT  */
+    INT32CONSTANT = 679,           /* INT32CONSTANT  */
+    UINT32CONSTANT = 680,          /* UINT32CONSTANT  */
+    INT64CONSTANT = 681,           /* INT64CONSTANT  */
+    UINT64CONSTANT = 682,          /* UINT64CONSTANT  */
+    SUBROUTINE = 683,              /* SUBROUTINE  */
+    DEMOTE = 684,                  /* DEMOTE  */
+    PAYLOADNV = 685,               /* PAYLOADNV  */
+    PAYLOADINNV = 686,             /* PAYLOADINNV  */
+    HITATTRNV = 687,               /* HITATTRNV  */
+    CALLDATANV = 688,              /* CALLDATANV  */
+    CALLDATAINNV = 689,            /* CALLDATAINNV  */
+    PAYLOADEXT = 690,              /* PAYLOADEXT  */
+    PAYLOADINEXT = 691,            /* PAYLOADINEXT  */
+    HITATTREXT = 692,              /* HITATTREXT  */
+    CALLDATAEXT = 693,             /* CALLDATAEXT  */
+    CALLDATAINEXT = 694,           /* CALLDATAINEXT  */
+    PATCH = 695,                   /* PATCH  */
+    SAMPLE = 696,                  /* SAMPLE  */
+    NONUNIFORM = 697,              /* NONUNIFORM  */
+    COHERENT = 698,                /* COHERENT  */
+    VOLATILE = 699,                /* VOLATILE  */
+    RESTRICT = 700,                /* RESTRICT  */
+    READONLY = 701,                /* READONLY  */
+    WRITEONLY = 702,               /* WRITEONLY  */
+    DEVICECOHERENT = 703,          /* DEVICECOHERENT  */
+    QUEUEFAMILYCOHERENT = 704,     /* QUEUEFAMILYCOHERENT  */
+    WORKGROUPCOHERENT = 705,       /* WORKGROUPCOHERENT  */
+    SUBGROUPCOHERENT = 706,        /* SUBGROUPCOHERENT  */
+    NONPRIVATE = 707,              /* NONPRIVATE  */
+    SHADERCALLCOHERENT = 708,      /* SHADERCALLCOHERENT  */
+    NOPERSPECTIVE = 709,           /* NOPERSPECTIVE  */
+    EXPLICITINTERPAMD = 710,       /* EXPLICITINTERPAMD  */
+    PERVERTEXEXT = 711,            /* PERVERTEXEXT  */
+    PERVERTEXNV = 712,             /* PERVERTEXNV  */
+    PERPRIMITIVENV = 713,          /* PERPRIMITIVENV  */
+    PERVIEWNV = 714,               /* PERVIEWNV  */
+    PERTASKNV = 715,               /* PERTASKNV  */
+    PERPRIMITIVEEXT = 716,         /* PERPRIMITIVEEXT  */
+    TASKPAYLOADWORKGROUPEXT = 717, /* TASKPAYLOADWORKGROUPEXT  */
+    PRECISE = 718                  /* PRECISE  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -556,7 +562,7 @@
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 560 "MachineIndependent/glslang_tab.cpp.h"
+#line 566 "MachineIndependent/glslang_tab.cpp.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 9875561..b79bd46 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -36,7 +36,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 #include "localintermediate.h"
 #include "../Include/InfoSink.h"
@@ -663,6 +663,8 @@
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
+    case EOpColorAttachmentReadEXT:   out.debug << "colorAttachmentReadEXT";   break;
+
     case EOpConstructReference: out.debug << "Construct reference type"; break;
 
     case EOpDeclare: out.debug << "Declare"; break;
@@ -1060,6 +1062,8 @@
     case EOpSubpassLoad:   out.debug << "subpassLoad";   break;
     case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break;
 
+    case EOpColorAttachmentReadEXT:   out.debug << "colorAttachmentReadEXT";   break;
+
     case EOpTraceNV:                          out.debug << "traceNV"; break;
     case EOpTraceRayMotionNV:                 out.debug << "traceRayMotionNV"; break;
     case EOpTraceKHR:                         out.debug << "traceRayKHR"; break;
@@ -1097,6 +1101,7 @@
     case EOpRayQueryGetWorldRayOrigin:                                     out.debug << "rayQueryGetWorldRayOriginEXT"; break;
     case EOpRayQueryGetIntersectionObjectToWorld:                          out.debug << "rayQueryGetIntersectionObjectToWorldEXT"; break;
     case EOpRayQueryGetIntersectionWorldToObject:                          out.debug << "rayQueryGetIntersectionWorldToObjectEXT"; break;
+    case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:             out.debug << "rayQueryGetIntersectionTriangleVertexPositionsEXT"; break;
 
     case EOpCooperativeMatrixLoad:  out.debug << "Load cooperative matrix";  break;
     case EOpCooperativeMatrixStore:  out.debug << "Store cooperative matrix";  break;
@@ -1105,9 +1110,43 @@
     case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
     case EOpDebugPrintf:  out.debug << "Debug printf";  break;
 
+    case EOpHitObjectTraceRayNV: out.debug << "HitObjectTraceRayNV"; break;
+    case EOpHitObjectTraceRayMotionNV: out.debug << "HitObjectTraceRayMotionNV"; break;
+    case EOpHitObjectRecordHitNV: out.debug << "HitObjectRecordHitNV"; break;
+    case EOpHitObjectRecordHitMotionNV: out.debug << "HitObjectRecordHitMotionNV"; break;
+    case EOpHitObjectRecordHitWithIndexNV: out.debug << "HitObjectRecordHitWithIndexNV"; break;
+    case EOpHitObjectRecordHitWithIndexMotionNV: out.debug << "HitObjectRecordHitWithIndexMotionNV"; break;
+    case EOpHitObjectRecordMissNV: out.debug << "HitObjectRecordMissNV"; break;
+    case EOpHitObjectRecordMissMotionNV: out.debug << "HitObjectRecordMissMotionNV"; break;
+    case EOpHitObjectRecordEmptyNV: out.debug << "HitObjectRecordEmptyNV"; break;
+    case EOpHitObjectExecuteShaderNV: out.debug << "HitObjectExecuteShaderNV"; break;
+    case EOpHitObjectIsEmptyNV: out.debug << "HitObjectIsEmptyNV"; break;
+    case EOpHitObjectIsMissNV: out.debug << "HitObjectIsMissNV"; break;
+    case EOpHitObjectIsHitNV:  out.debug << "HitObjectIsHitNV"; break;
+    case EOpHitObjectGetRayTMinNV: out.debug << "HitObjectGetRayTMinNV"; break;
+    case EOpHitObjectGetRayTMaxNV: out.debug << "HitObjectGetRayTMaxNV"; break;
+    case EOpHitObjectGetObjectRayOriginNV: out.debug << "HitObjectGetObjectRayOriginNV"; break;
+    case EOpHitObjectGetObjectRayDirectionNV: out.debug << "HitObjectGetObjectRayDirectionNV"; break;
+    case EOpHitObjectGetWorldRayOriginNV: out.debug << "HitObjectGetWorldRayOriginNV"; break;
+    case EOpHitObjectGetWorldRayDirectionNV: out.debug << "HitObjectGetWorldRayDirectionNV"; break;
+    case EOpHitObjectGetObjectToWorldNV: out.debug << "HitObjectGetObjectToWorldNV"; break;
+    case EOpHitObjectGetWorldToObjectNV: out.debug << "HitObjectGetWorldToObjectNV"; break;
+    case EOpHitObjectGetInstanceCustomIndexNV: out.debug<< "HitObjectGetInstanceCustomIndexNV"; break;
+    case EOpHitObjectGetInstanceIdNV: out.debug << "HitObjectGetInstaneIdNV"; break;
+    case EOpHitObjectGetGeometryIndexNV: out.debug << "HitObjectGetGeometryIndexNV"; break;
+    case EOpHitObjectGetPrimitiveIndexNV: out.debug << "HitObjectGetPrimitiveIndexNV"; break;
+    case EOpHitObjectGetHitKindNV: out.debug << "HitObjectGetHitKindNV"; break;
+    case EOpHitObjectGetAttributesNV: out.debug << "HitObjectGetAttributesNV"; break;
+    case EOpHitObjectGetCurrentTimeNV: out.debug << "HitObjectGetCurrentTimeNV"; break;
+    case EOpHitObjectGetShaderBindingTableRecordIndexNV: out.debug << "HitObjectGetShaderBindingTableRecordIndexNV"; break;
+    case EOpHitObjectGetShaderRecordBufferHandleNV: out.debug << "HitObjectReadShaderRecordBufferHandleNV"; break;
+    case EOpReorderThreadNV: out.debug << "ReorderThreadNV"; break;
+
 #ifndef GLSLANG_WEB
     case EOpSpirvInst: out.debug << "spirv_instruction"; break;
 #endif
+    case EOpStencilAttachmentReadEXT: out.debug << "stencilAttachmentReadEXT"; break;
+    case EOpDepthAttachmentReadEXT: out.debug << "depthAttachmentReadEXT"; break;
 
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
@@ -1512,6 +1551,12 @@
             infoSink.debug << "using early_fragment_tests\n";
         if (postDepthCoverage)
             infoSink.debug << "using post_depth_coverage\n";
+        if (nonCoherentColorAttachmentReadEXT)
+            infoSink.debug << "using non_coherent_color_attachment_readEXT\n";
+        if (nonCoherentDepthAttachmentReadEXT)
+            infoSink.debug << "using non_coherent_depth_attachment_readEXT\n";
+        if (nonCoherentStencilAttachmentReadEXT)
+            infoSink.debug << "using non_coherent_stencil_attachment_readEXT\n";
         if (depthLayout != EldNone)
             infoSink.debug << "using " << TQualifier::getLayoutDepthString(depthLayout) << "\n";
         if (blendEquations != 0) {
@@ -1552,7 +1597,7 @@
         break;
     }
 
-    if (treeRoot == 0 || ! tree)
+    if (treeRoot == nullptr || ! tree)
         return;
 
     TOutputTraverser it(infoSink);
@@ -1563,4 +1608,4 @@
 
 } // end namespace glslang
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 4250e92..efb26b8 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 #include "../Include/Common.h"
 #include "../Include/InfoSink.h"
@@ -145,6 +145,8 @@
             base->getWritableType().getQualifier().layoutComponent = at->second.newComponent;
         if (at->second.newIndex != -1)
             base->getWritableType().getQualifier().layoutIndex = at->second.newIndex;
+        if (at->second.upgradedToPushConstant)
+            base->getWritableType().getQualifier().layoutPushConstant = true;
     }
 
   private:
@@ -1670,31 +1672,34 @@
                     }
                 }
             }
-            // If it's been upgraded to push_constant, then remove it from the uniformVector
+            // If it's been upgraded to push_constant, then set the flag so when its traversed
+            // in the next for loop, all references to this symbol will get their flag changed.
             // so it doesn't get a set/binding assigned to it.
             if (upgraded) {
-                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;
-                }
+                std::for_each(uniformVector.begin(), uniformVector.end(),
+                                       [this](TVarLivePair& p) {
+                if (p.first == autoPushConstantBlockName) {
+                        p.second.upgradedToPushConstant = true;
+                    }
+                });
             }
         }
         for (size_t stage = 0; stage < EShLangCount; stage++) {
             if (intermediates[stage] != nullptr) {
                 // traverse each stage, set new location to each input/output and unifom symbol, set new binding to
-                // ubo, ssbo and opaque symbols
+                // ubo, ssbo and opaque symbols. Assign push_constant upgrades as well.
                 TVarLiveMap** pUniformVarMap = uniformResolve.uniformVarMap;
                 std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) {
                     auto at = pUniformVarMap[stage]->find(p.second.symbol->getAccessName());
                     if (at != pUniformVarMap[stage]->end() && at->second.id == p.second.id){
-                        int resolvedBinding = at->second.newBinding;
-                        at->second = p.second;
-                        if (resolvedBinding > 0)
-                            at->second.newBinding = resolvedBinding;
+                        if (p.second.upgradedToPushConstant) {
+                            at->second.upgradedToPushConstant = true;
+                        } else {
+                            int resolvedBinding = at->second.newBinding;
+                            at->second = p.second;
+                            if (resolvedBinding > 0)
+                                at->second.newBinding = resolvedBinding;
+                        }
                     }
                 });
                 TVarSetTraverser iter_iomap(*intermediates[stage], *inVarMaps[stage], *outVarMaps[stage],
@@ -1710,4 +1715,4 @@
 
 } // end namespace glslang
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index ba7bc3b..464d73e 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 #ifndef _IOMAPPER_INCLUDED
 #define _IOMAPPER_INCLUDED
@@ -55,6 +55,7 @@
     long long id;
     TIntermSymbol* symbol;
     bool live;
+    bool upgradedToPushConstant;
     int newBinding;
     int newSet;
     int newLocation;
@@ -63,6 +64,7 @@
     EShLanguage stage;
 
     void clearNewAssignments() {
+        upgradedToPushConstant = false;
         newBinding = -1;
         newSet = -1;
         newLocation = -1;
@@ -358,4 +360,4 @@
 
 #endif // _IOMAPPER_INCLUDED
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index acc512f..bbfa022 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -89,7 +89,7 @@
 //
 void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     mergeCallGraphs(infoSink, unit);
     mergeModes(infoSink, unit);
     mergeTrees(infoSink, unit);
@@ -161,7 +161,7 @@
     callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end());
 }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 #define MERGE_MAX(member) member = std::max(member, unit.member)
 #define MERGE_TRUE(member) if (unit.member) member = unit.member;
@@ -271,6 +271,9 @@
 
     MERGE_TRUE(earlyFragmentTests);
     MERGE_TRUE(postDepthCoverage);
+    MERGE_TRUE(nonCoherentColorAttachmentReadEXT);
+    MERGE_TRUE(nonCoherentDepthAttachmentReadEXT);
+    MERGE_TRUE(nonCoherentStencilAttachmentReadEXT);
 
     if (depthLayout == EldNone)
         depthLayout = unit.depthLayout;
@@ -750,6 +753,21 @@
                 }
 
                 // Update implicit array sizes
+                if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isImplicitlySizedArray()) {
+                    if (unitSymbol->getType().getImplicitArraySize() > symbol->getType().getImplicitArraySize()){
+                        symbol->getWritableType().updateImplicitArraySize(unitSymbol->getType().getImplicitArraySize());
+                    }
+                }
+                else if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isSizedArray()) {
+                    if (symbol->getWritableType().getImplicitArraySize() > unitSymbol->getType().getOuterArraySize())
+                        error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders.");
+                }
+                else if (unitSymbol->getType().isImplicitlySizedArray() && symbol->getWritableType().isSizedArray()) {
+                    if (unitSymbol->getType().getImplicitArraySize() > symbol->getWritableType().getOuterArraySize())
+                        error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders.");
+                }
+
+                // Update implicit array sizes
                 mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType());
 
                 // Check for consistent types/qualification/initializers etc.
@@ -759,6 +777,19 @@
             else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage)
                 error(infoSink, "Only one push_constant block is allowed per stage");
         }
+
+        // Check conflicts between preset primitives and sizes of I/O variables among multiple geometry shaders
+        if (language == EShLangGeometry && unitStage == EShLangGeometry)
+        {
+            TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode();
+            if (unitSymbol->isArray() && unitSymbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().builtIn == EbvNone)
+                if ((unitSymbol->getArraySizes()->isImplicitlySized() &&
+                        unitSymbol->getArraySizes()->getImplicitSize() != TQualifier::mapGeometryToSize(getInputPrimitive())) ||
+                    (! unitSymbol->getArraySizes()->isImplicitlySized() &&
+                        unitSymbol->getArraySizes()->getDimSize(0) != TQualifier::mapGeometryToSize(getInputPrimitive())))
+                    error(infoSink, "Not all array sizes match across all geometry shaders in the program");
+        }
+
         if (merge) {
             linkerObjects.push_back(unitLinkerObjects[unitLinkObj]);
 
@@ -828,7 +859,7 @@
 //
 void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage)
 {
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     bool crossStage = getStage() != unitStage;
     bool writeTypeComparison = false;
     bool errorReported = false;
@@ -863,7 +894,8 @@
         else {
             arraysMatch = symbol.getType().sameArrayness(unitSymbol.getType()) ||
                 (symbol.getType().isArray() && unitSymbol.getType().isArray() &&
-                (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()));
+                 (symbol.getType().isImplicitlySizedArray() || unitSymbol.getType().isImplicitlySizedArray() ||
+                  symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()));
         }
 
         int lpidx = -1;
@@ -1383,7 +1415,7 @@
     TCall* newRoot;
     do {
         // See if we have unvisited parts of the graph.
-        newRoot = 0;
+        newRoot = nullptr;
         for (TGraph::iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
             if (! call->visited) {
                 newRoot = &(*call);
@@ -1517,7 +1549,10 @@
     if (! keepUncalled) {
         for (int f = 0; f < (int)functionSequence.size(); ++f) {
             if (! reachable[f])
+            {
+                resetTopLevelUncalledStatus(functionSequence[f]->getAsAggregate()->getName());
                 functionSequence[f] = nullptr;
+            }
         }
         functionSequence.erase(std::remove(functionSequence.begin(), functionSequence.end(), nullptr), functionSequence.end());
     }
@@ -1585,7 +1620,7 @@
     return found;
 }
 
-// Accumulate locations used for inputs, outputs, and uniforms, payload and callable data
+// Accumulate locations used for inputs, outputs, and uniforms, payload, callable data, and tileImageEXT
 // and check for collisions as the accumulation is done.
 //
 // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value.
@@ -1598,7 +1633,6 @@
     typeCollision = false;
 
     int set;
-    int setRT;
     if (qualifier.isPipeInput())
         set = 0;
     else if (qualifier.isPipeOutput())
@@ -1607,10 +1641,14 @@
         set = 2;
     else if (qualifier.storage == EvqBuffer)
         set = 3;
+    else if (qualifier.storage == EvqTileImageEXT)
+        set = 4;
     else if (qualifier.isAnyPayload())
-        setRT = 0;
+        set = 0;
     else if (qualifier.isAnyCallable())
-        setRT = 1;
+        set = 1;
+    else if (qualifier.isHitObjectAttrNV())
+        set = 2;
     else
         return -1;
 
@@ -1650,12 +1688,14 @@
     // slot irrespective of type.
     int collision = -1; // no collision
 #ifndef GLSLANG_WEB
-    if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) {
+    if (qualifier.isAnyPayload() || qualifier.isAnyCallable() || qualifier.isHitObjectAttrNV()) {
         TRange range(qualifier.layoutLocation, qualifier.layoutLocation);
-        collision = checkLocationRT(setRT, qualifier.layoutLocation);
+        collision = checkLocationRT(set, qualifier.layoutLocation);
         if (collision < 0)
-            usedIoRT[setRT].push_back(range);
-    } else if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
+            usedIoRT[set].push_back(range);
+        return collision;
+    }
+    if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
         (qualifier.isPipeInput() || qualifier.isPipeOutput())) {
         // Dealing with dvec3 in/out split across two locations.
         // Need two io-ranges.
@@ -1681,31 +1721,33 @@
             if (collision < 0)
                 usedIo[set].push_back(range2);
         }
-    } else
-#endif
-    {
-        // Not a dvec3 in/out split across two locations, generic path.
-        // Need a single IO-range block.
-
-        TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1);
-        TRange componentRange(0, 3);
-        if (qualifier.hasComponent() || type.getVectorSize() > 0) {
-            int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1);
-            if (qualifier.hasComponent())
-                componentRange.start = qualifier.layoutComponent;
-            componentRange.last  = componentRange.start + consumedComponents - 1;
-        }
-
-        // combine location and component ranges
-        TIoRange range(locationRange, componentRange, type.getBasicType(), qualifier.hasIndex() ? qualifier.getIndex() : 0);
-
-        // check for collisions, except for vertex inputs on desktop targeting OpenGL
-        if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
-            collision = checkLocationRange(set, range, type, typeCollision);
-
-        if (collision < 0)
-            usedIo[set].push_back(range);
+        return collision;
     }
+#endif
+    // Not a dvec3 in/out split across two locations, generic path.
+    // Need a single IO-range block.
+
+    TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1);
+    TRange componentRange(0, 3);
+    if (qualifier.hasComponent() || type.getVectorSize() > 0) {
+        int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1);
+        if (qualifier.hasComponent())
+            componentRange.start = qualifier.layoutComponent;
+        componentRange.last  = componentRange.start + consumedComponents - 1;
+    }
+
+    // combine location and component ranges
+    TBasicType basicTy = type.getBasicType();
+    if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT())
+        basicTy = type.getSampler().type;
+    TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0);
+
+    // check for collisions, except for vertex inputs on desktop targeting OpenGL
+    if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
+        collision = checkLocationRange(set, range, type, typeCollision);
+
+    if (collision < 0)
+        usedIo[set].push_back(range);
 
     return collision;
 }
@@ -1728,6 +1770,19 @@
         }
     }
 
+    // check typeCollision between tileImageEXT and out
+    if (set == 4 || set == 1) {
+      // if the set is "tileImageEXT", check against "out" and vice versa
+      int againstSet = (set == 4) ? 1 : 4;
+      for (size_t r = 0; r < usedIo[againstSet].size(); ++r) {
+        if (range.location.overlap(usedIo[againstSet][r].location) && type.getBasicType() != usedIo[againstSet][r].basicType) {
+            // aliased-type mismatch
+            typeCollision = true;
+            return std::max(range.location.start, usedIo[againstSet][r].location.start);
+        }
+      }
+    }
+
     return -1; // no collision
 }
 
@@ -2012,6 +2067,15 @@
     case EbtInt16:
     case EbtUint16:  size = 2; return 2;
     case EbtReference: size = 8; return 8;
+    case EbtSampler:
+    {
+        if (type.isBindlessImage() || type.isBindlessTexture()) {
+            size = 8; return 8;
+        }
+        else {
+            size = 4; return 4;
+        }
+    }
     default:         size = 4; return 4;
     }
 }
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index e7a171c..2aa766a 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -225,6 +225,16 @@
     LayoutDerivativeGroupLinear,  // derivative_group_linearNV
 };
 
+//
+// Status type on AST level. Some uncalled status or functions would be reset in call graph.
+// Currently we will keep status set by explicitly declared layout or variable decl.
+//
+enum AstRefType {
+    AstRefTypeVar,         // Status set by variable decl
+    AstRefTypeFunc,        // Status set by function decl
+    AstRefTypeLayout,      // Status set by layout decl
+};
+
 class TIdMaps {
 public:
     TMap<TString, long long>& operator[](long long i) { return maps[i]; }
@@ -283,10 +293,8 @@
 public:
     explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
         language(l),
-#ifndef GLSLANG_ANGLE
         profile(p), version(v),
-#endif
-        treeRoot(0),
+        treeRoot(nullptr),
         resources(TBuiltInResource{}),
         numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
         invertY(false),
@@ -313,7 +321,12 @@
         inputPrimitive(ElgNone), outputPrimitive(ElgNone),
         pixelCenterInteger(false), originUpperLeft(false),texCoordBuiltinRedeclared(false),
         vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false),
-        postDepthCoverage(false), earlyAndLateFragmentTestsAMD(false), depthLayout(EldNone), stencilLayout(ElsNone),
+        postDepthCoverage(false), earlyAndLateFragmentTestsAMD(false),
+        nonCoherentColorAttachmentReadEXT(false),
+        nonCoherentDepthAttachmentReadEXT(false),
+        nonCoherentStencilAttachmentReadEXT(false),
+        depthLayout(EldNone),
+        stencilLayout(ElsNone),
         hlslFunctionality1(false),
         blendEquations(0), xfbMode(false), multiStream(false),
         layoutOverrideCoverage(false),
@@ -358,15 +371,11 @@
 
     void setVersion(int v)
     {
-#ifndef GLSLANG_ANGLE
         version = v;
-#endif
     }
     void setProfile(EProfile p)
     {
-#ifndef GLSLANG_ANGLE
         profile = p;
-#endif
     }
 
     int getVersion() const { return version; }
@@ -634,6 +643,9 @@
     bool getXfbMode() const { return false; }
     bool isMultiStream() const { return false; }
     TLayoutGeometry getOutputPrimitive() const { return ElgNone; }
+    bool getNonCoherentColorAttachmentReadEXT() const { return false; }
+    bool getNonCoherentDepthAttachmentReadEXT() const { return false; }
+    bool getNonCoherentStencilAttachmentReadEXT() const { return false; }
     bool getPostDepthCoverage() const { return false; }
     bool getEarlyFragmentTests() const { return false; }
     TLayoutDepth getDepth() const { return EldNone; }
@@ -750,6 +762,65 @@
         useVariablePointers = true;
         processes.addProcess("use-variable-pointers");
     }
+    // Set the global flag for bindless texture
+    void setBindlessTextureMode(const TString& currentCaller, AstRefType type)
+    {
+        // When type is not func, currentCaller should be "" (empty string)
+        bindlessTextureModeCaller[currentCaller] = type;
+    }
+
+    // Get the global flag for bindless texture
+    bool getBindlessTextureMode() const
+    {
+        return (bindlessTextureModeCaller.size() > 0);
+    }
+
+    // Set the global flag for bindless image
+    void setBindlessImageMode(const TString& currentCaller, AstRefType type)
+    {
+        // When type is not func, currentCaller should be "" (empty string)
+        bindlessImageModeCaller[currentCaller] = type;
+    }
+
+    // Get the global flag for bindless image
+    bool getBindlessImageMode() const
+    {
+        return (bindlessImageModeCaller.size() > 0);
+    }
+
+    // Get the global flag for bindless texture
+    bool resetTopLevelUncalledStatus(const TString& deadCaller)
+    {
+        // For reflection collection purpose, currently uniform layout setting and some
+        // flags introduced by variables (IO, global, etc,.) won't be reset here.
+        // Remove each global status (AST top level) introduced by uncalled functions.
+        // If a status is set by several functions, keep those which in call graph.
+        bool result = false;
+
+        // For two types of bindless mode flag, we would only reset which is set by an uncalled function.
+        // If one status flag's key in caller vec is empty, it should be come from a non-function setting.
+        if (!bindlessTextureModeCaller.empty()) {
+            auto caller = bindlessTextureModeCaller.find(deadCaller);
+            if (caller != bindlessTextureModeCaller.end() && bindlessTextureModeCaller[deadCaller] == AstRefTypeFunc) {
+                bindlessTextureModeCaller.erase(caller);
+                result = true;
+            }
+        }
+        if (!bindlessImageModeCaller.empty()) {
+            auto caller = bindlessImageModeCaller.find(deadCaller);
+            if (caller != bindlessImageModeCaller.end() && bindlessImageModeCaller[deadCaller] == AstRefTypeFunc) {
+                bindlessImageModeCaller.erase(caller);
+                result = true;
+            }
+        }
+        return result;
+    }
+
+    bool getBindlessMode() const
+    {
+        return getBindlessTextureMode() || getBindlessImageMode();
+    }
+
     bool usingVariablePointers() const { return useVariablePointers; }
 
 #ifdef ENABLE_HLSL
@@ -831,6 +902,12 @@
         return true;
     }
     TLayoutGeometry getOutputPrimitive() const { return outputPrimitive; }
+    void setNonCoherentColorAttachmentReadEXT() { nonCoherentColorAttachmentReadEXT = true; }
+    bool getNonCoherentColorAttachmentReadEXT() const { return nonCoherentColorAttachmentReadEXT; }
+    void setNonCoherentDepthAttachmentReadEXT() { nonCoherentDepthAttachmentReadEXT = true; }
+    bool getNonCoherentDepthAttachmentReadEXT() const { return nonCoherentDepthAttachmentReadEXT; }
+    void setNonCoherentStencilAttachmentReadEXT() { nonCoherentStencilAttachmentReadEXT = true; }
+    bool getNonCoherentStencilAttachmentReadEXT() const { return nonCoherentStencilAttachmentReadEXT; }
     void setPostDepthCoverage() { postDepthCoverage = true; }
     bool getPostDepthCoverage() const { return postDepthCoverage; }
     void setEarlyFragmentTests() { earlyFragmentTests = true; }
@@ -1101,13 +1178,8 @@
     typedef std::list<TCall> TGraph;
     TGraph callGraph;
 
-#ifdef GLSLANG_ANGLE
-    const EProfile profile = ECoreProfile;
-    const int version = 450;
-#else
     EProfile profile;                           // source profile
     int version;                                // source version
-#endif
     SpvVersion spvVersion;
     TIntermNode* treeRoot;
     std::set<std::string> requestedExtensions;  // cumulation of all enabled or required extensions; not connected to what subset of the shader used them
@@ -1157,6 +1229,9 @@
     bool earlyFragmentTests;
     bool postDepthCoverage;
     bool earlyAndLateFragmentTestsAMD;
+    bool nonCoherentColorAttachmentReadEXT;
+    bool nonCoherentDepthAttachmentReadEXT;
+    bool nonCoherentStencilAttachmentReadEXT;
     TLayoutDepth depthLayout;
     TLayoutStencil stencilLayout;
     bool hlslFunctionality1;
@@ -1199,7 +1274,8 @@
 
     TSpirvRequirement* spirvRequirement;
     TSpirvExecutionMode* spirvExecutionMode;
-
+    std::map<TString, AstRefType> bindlessTextureModeCaller;
+    std::map<TString, AstRefType> bindlessImageModeCaller;
     std::unordered_map<std::string, int> uniformLocationOverrides;
     int uniformLocationBase;
     TNumericFeatures numericFeatures;
@@ -1209,8 +1285,9 @@
     std::unordered_set<int> usedConstantId; // specialization constant ids used
     std::vector<TOffsetRange> usedAtomics;  // sets of bindings used by atomic counters
     std::vector<TIoRange> usedIo[4];        // sets of used locations, one for each of in, out, uniform, and buffers
-    std::vector<TRange> usedIoRT[2];        // sets of used location, one for rayPayload/rayPayloadIN and other
-                                            // for callableData/callableDataIn
+    std::vector<TRange> usedIoRT[4];        // sets of used location, one for rayPayload/rayPayloadIN,
+                                            // one for callableData/callableDataIn, one for hitObjectAttributeNV and
+                                            // one for shaderrecordhitobjectNV
     // set of names of statically read/written I/O that might need extra checking
     std::set<TString> ioAccessed;
 
diff --git a/glslang/MachineIndependent/parseConst.cpp b/glslang/MachineIndependent/parseConst.cpp
index 6c18299..8350972 100644
--- a/glslang/MachineIndependent/parseConst.cpp
+++ b/glslang/MachineIndependent/parseConst.cpp
@@ -198,7 +198,7 @@
 
 bool TIntermediate::parseConstTree(TIntermNode* root, TConstUnionArray unionArray, TOperator constructorType, const TType& t, bool singleConstantParam)
 {
-    if (root == 0)
+    if (root == nullptr)
         return false;
 
     TConstTraverser it(unionArray, singleConstantParam, constructorType, t);
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index 7248354..c9f82d0 100644
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -58,14 +58,14 @@
                    const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink,
                    bool forwardCompatible, EShMessages messages)
         :
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         forwardCompatible(forwardCompatible),
         profile(profile),
 #endif
         infoSink(infoSink), version(version), 
         language(language),
         spvVersion(spvVersion), 
-        intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { }
+        intermediate(interm), messages(messages), numErrors(0), currentScanner(nullptr) { }
     virtual ~TParseVersions() { }
     void requireStage(const TSourceLoc&, EShLanguageMask, const char* featureDesc);
     void requireStage(const TSourceLoc&, EShLanguage, const char* featureDesc);
@@ -117,13 +117,8 @@
     bool suppressWarnings() const { return true; }
     bool isForwardCompatible() const { return false; }
 #else
-#ifdef GLSLANG_ANGLE
-    const bool forwardCompatible = true;
-    const EProfile profile = ECoreProfile;
-#else
     bool forwardCompatible;      // true if errors are to be given for use of deprecated features
     EProfile profile;            // the declared profile in the shader (core by default)
-#endif
     bool isEsProfile() const { return profile == EEsProfile; }
     void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc);
     void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions,
@@ -231,6 +226,7 @@
 protected:
     TMap<TString, TExtensionBehavior> extensionBehavior;    // for each extension string, what its current behavior is
     TMap<TString, unsigned int> extensionMinSpv;            // for each extension string, store minimum spirv required
+    TVector<TString> spvUnsupportedExt;                     // for extensions reserved for spv usage.
     EShMessages messages;        // errors/warnings/rule-sets
     int numErrors;               // number of compile-time errors encountered
     TInputScanner* currentScanner;
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index aa1e0d7..d5a7109 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -1126,9 +1126,6 @@
         pasting = true;
     }
 
-    // HLSL does expand macros before concatenation
-    if (pasting && pp->parseContext.isReadingHLSL())
-        pasting = false;
 
     // TODO: preprocessor:  properly handle whitespace (or lack of it) between tokens when expanding
     if (token == PpAtomIdentifier) {
@@ -1138,9 +1135,12 @@
                 break;
         if (i >= 0) {
             TokenStream* arg = expandedArgs[i];
-            if (arg == nullptr || pasting)
+            bool expanded = !!arg && !pasting;
+            // HLSL does expand macros before concatenation
+            if (arg == nullptr || (pasting && !pp->parseContext.isReadingHLSL()) ) {
                 arg = args[i];
-            pp->pushTokenStreamInput(*arg, prepaste);
+            }
+            pp->pushTokenStreamInput(*arg, prepaste, expanded);
 
             return pp->scanToken(ppToken);
         }
@@ -1183,6 +1183,9 @@
 {
     ppToken->space = false;
     int macroAtom = atomStrings.getAtom(ppToken->name);
+    if (ppToken->fullyExpanded)
+        return MacroExpandNotStarted;
+
     switch (macroAtom) {
     case PpAtomLineMacro:
         // Arguments which are macro have been replaced in the first stage.
@@ -1214,8 +1217,10 @@
     MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom);
 
     // no recursive expansions
-    if (macro != nullptr && macro->busy)
+    if (macro != nullptr && macro->busy) {
+        ppToken->fullyExpanded = true;
         return MacroExpandNotStarted;
+    }
 
     // not expanding undefined macros
     if ((macro == nullptr || macro->undef) && ! expandUndef)
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.cpp b/glslang/MachineIndependent/preprocessor/PpContext.cpp
index 1363ce2..70f5119 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpContext.cpp
@@ -85,7 +85,7 @@
 namespace glslang {
 
 TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, TShader::Includer& inclr) :
-    preamble(0), strings(0), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false),
+    preamble(nullptr), strings(nullptr), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false),
     rootFileName(rootFileName),
     currentSourceFile(rootFileName),
     disableEscapeSequences(false)
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
index 714b5ea..590eab6 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -102,6 +102,7 @@
         i64val = 0;
         loc.init();
         name[0] = 0;
+        fullyExpanded = false;
     }
 
     // Used for comparing macro definitions, so checks what is relevant for that.
@@ -117,6 +118,8 @@
     // True if a space (for white space or a removed comment) should also be
     // recognized, in front of the token returned:
     bool space;
+
+    bool fullyExpanded;
     // Numeric value of the token:
     union {
         int ival;
@@ -475,16 +478,27 @@
     //
     // From PpTokens.cpp
     //
-    void pushTokenStreamInput(TokenStream&, bool pasting = false);
+    void pushTokenStreamInput(TokenStream&, bool pasting = false, bool expanded = false);
     void UngetToken(int token, TPpToken*);
 
     class tTokenInput : public tInput {
     public:
-        tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting) :
+        tTokenInput(TPpContext* pp, TokenStream* t, bool prepasting, bool expanded) :
             tInput(pp),
             tokens(t),
-            lastTokenPastes(prepasting) { }
-        virtual int scan(TPpToken *ppToken) override { return tokens->getToken(pp->parseContext, ppToken); }
+            lastTokenPastes(prepasting),
+            preExpanded(expanded) { }
+        virtual int scan(TPpToken *ppToken) override {
+            int token = tokens->getToken(pp->parseContext, ppToken);
+            ppToken->fullyExpanded = preExpanded;
+            if (tokens->atEnd() && token == PpAtomIdentifier) {
+                int macroAtom = pp->atomStrings.getAtom(ppToken->name);
+                MacroSymbol* macro = macroAtom == 0 ? nullptr : pp->lookupMacroDef(macroAtom);
+                if (macro && macro->functionLike)
+                    ppToken->fullyExpanded = false;
+            }
+            return token;
+        }
         virtual int getch() override { assert(0); return EndOfInput; }
         virtual void ungetch() override { assert(0); }
         virtual bool peekPasting() override { return tokens->peekTokenizedPasting(lastTokenPastes); }
@@ -492,6 +506,7 @@
     protected:
         TokenStream* tokens;
         bool lastTokenPastes; // true if the last token in the input is to be pasted, rather than consumed as a token
+        bool preExpanded;
     };
 
     class tUngotTokenInput : public tInput {
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index ad11792..25b9bbd 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -3,6 +3,7 @@
 // Copyright (C) 2013 LunarG, Inc.
 // Copyright (C) 2017 ARM Limited.
 // Copyright (C) 2015-2018 Google, Inc.
+// Copyright (c) 2023, Mobica Limited
 //
 // All rights reserved.
 //
@@ -480,9 +481,7 @@
         E_GL_EXT_shader_explicit_arithmetic_types_int16 };
     static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
 
-    ppToken->ival = 0;
-    ppToken->i64val = 0;
-    ppToken->space = false;
+    ppToken->clear();
     ch = getch();
     for (;;) {
         while (ch == ' ' || ch == '\t') {
@@ -551,7 +550,7 @@
 
                     ival = 0;
                     do {
-                        if (len < MaxTokenLength && ival <= 0x0fffffffffffffffull) {
+                        if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
                             ppToken->name[len++] = (char)ch;
                             if (ch >= '0' && ch <= '9') {
                                 ii = ch - '0';
@@ -641,6 +640,110 @@
                     ppToken->ival = (int)ival;
                     return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
                 }
+            } else if ((ch == 'b' || ch == 'B') && pp->parseContext.intermediate.getSource() == EShSourceHlsl) {
+                // must be binary
+                bool isUnsigned = false;
+                bool isInt64 = false;
+                bool isInt16 = false;
+                ppToken->name[len++] = (char)ch;
+                ch = getch();
+
+                // Check value
+                if ((ch == '0' || ch == '1'))
+                {
+                    ival = 0;
+                    do {
+                        if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
+                            ppToken->name[len++] = (char)ch;
+                            if (ch == '0' || ch == '1') {
+                                ii = ch - '0';
+                            } else {
+                                pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
+                            }
+                            ival = (ival << 1) | ii;
+                        }
+                        else
+                        {
+                            if (! AlreadyComplained) {
+                                if(len < MaxTokenLength)
+                                    pp->parseContext.ppError(ppToken->loc, "binary literal too big", "", "");
+                                else
+                                    pp->parseContext.ppError(ppToken->loc, "binary literal too long", "", "");
+                                AlreadyComplained = 1;
+                            }
+                            ival = 0xffffffffffffffffull;
+                        }
+                        ch = getch();
+                    } while (ch == '0' || ch == '1');
+                }
+                else
+                {
+                   pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
+                }
+
+                // check type
+                if (ch == 'u' || ch == 'U') {
+                    if (len < MaxTokenLength)
+                        ppToken->name[len++] = (char)ch;
+                    isUnsigned = true;
+
+#ifndef GLSLANG_WEB
+                    int nextCh = getch();
+                    if (nextCh == 'l' || nextCh == 'L') {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt64 = true;
+                    } else
+                        ungetch();
+
+                    nextCh = getch();
+                    if ((nextCh == 's' || nextCh == 'S') &&
+                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                        if (len < MaxTokenLength)
+                            ppToken->name[len++] = (char)nextCh;
+                        isInt16 = true;
+                    } else
+                        ungetch();
+                } else if (ch == 'l' || ch == 'L') {
+                    if (len < MaxTokenLength)
+                        ppToken->name[len++] = (char)ch;
+                    isInt64 = true;
+                } else if ((ch == 's' || ch == 'S') &&
+                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                    if (len < MaxTokenLength)
+                        ppToken->name[len++] = (char)ch;
+                    isInt16 = true;
+#endif
+                } else {
+                    ungetch();
+                }
+                ppToken->name[len] = '\0';
+
+                // Assign value
+                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                    if (pp->ifdepth == 0) {
+                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                        "64-bit binary literal");
+                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                            Num_Int64_Extensions, Int64_Extensions, "64-bit binary literal");
+                    }
+                    ppToken->i64val = ival;
+                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
+                } else if (isInt16) {
+                    if (pp->ifdepth == 0) {
+                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
+                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
+                                                            "16-bit binary literal");
+                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
+                                Num_Int16_Extensions, Int16_Extensions, "16-bit binary literal");
+                        }
+                    }
+                    ppToken->ival = (int)ival;
+                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
+                } else {
+                    ppToken->ival = (int)ival;
+                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
+                }
             } else {
                 // could be octal integer or floating point, speculative pursue octal until it must be floating point
 
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index 7ed5870..121bfca 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -85,9 +85,6 @@
 #ifndef _CRT_SECURE_NO_WARNINGS
 #define _CRT_SECURE_NO_WARNINGS
 #endif
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
-#define snprintf sprintf_s
-#endif
 
 #include <cassert>
 #include <cstdlib>
@@ -121,7 +118,7 @@
     if (atom == '#') {
         if (peekToken('#')) {
             parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
-            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, 0, "token pasting (##)");
+            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, nullptr, "token pasting (##)");
             currentPos++;
             atom = PpAtomPaste;
         }
@@ -195,9 +192,9 @@
     return pasting;
 }
 
-void TPpContext::pushTokenStreamInput(TokenStream& ts, bool prepasting)
+void TPpContext::pushTokenStreamInput(TokenStream& ts, bool prepasting, bool expanded)
 {
-    pushInput(new tTokenInput(this, &ts, prepasting));
+    pushInput(new tTokenInput(this, &ts, prepasting, expanded));
     ts.reset();
 }
 
diff --git a/glslang/MachineIndependent/propagateNoContraction.cpp b/glslang/MachineIndependent/propagateNoContraction.cpp
index 9def592..a1aa5ea 100644
--- a/glslang/MachineIndependent/propagateNoContraction.cpp
+++ b/glslang/MachineIndependent/propagateNoContraction.cpp
@@ -423,7 +423,7 @@
                                         ReturnBranchNodeSet());
 
     TIntermNode* root = intermediate.getTreeRoot();
-    if (root == 0)
+    if (root == nullptr)
         return result_tuple;
 
     NodeMapping& symbol_definition_mapping = std::get<0>(result_tuple);
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 9ea48c4..144f85b 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 #include "../Include/Common.h"
 #include "reflection.h"
@@ -682,7 +682,7 @@
     }
 
     // For a binary operation indexing into an aggregate, chase down the base of the aggregate.
-    // Return 0 if the topology does not fit this situation.
+    // Return nullptr if the topology does not fit this situation.
     TIntermSymbol* findBase(const TIntermBinary* node)
     {
         TIntermSymbol *base = node->getLeft()->getAsSymbolNode();
@@ -1271,4 +1271,4 @@
 
 } // end namespace glslang
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 5af4467..bfd5452 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -33,7 +33,7 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 #ifndef _REFLECTION_INCLUDED
 #define _REFLECTION_INCLUDED
@@ -220,4 +220,4 @@
 
 #endif // _REFLECTION_INCLUDED
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index 16eb939..f6b1c6a 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -36,21 +36,9 @@
 set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
 
 # Link pthread
-set(CMAKE_THREAD_PREFER_PTHREAD ON)
-if(${CMAKE_VERSION} VERSION_LESS "3.1.0" OR CMAKE_CROSSCOMPILING)
-    # Needed as long as we support CMake 2.8 for Ubuntu 14.04,
-    # which does not support the recommended Threads::Threads target.
-    # https://cmake.org/cmake/help/v2.8.12/cmake.html#module:FindThreads
-    # Also needed when cross-compiling to work around
-    # https://gitlab.kitware.com/cmake/cmake/issues/16920
-    find_package(Threads)
-    target_link_libraries(OSDependent ${CMAKE_THREAD_LIBS_INIT})
-else()
-    # This is the recommended way, so we use it for 3.1+.
-    set(THREADS_PREFER_PTHREAD_FLAG ON)
-    find_package(Threads)
-    target_link_libraries(OSDependent Threads::Threads)
-endif()
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package(Threads REQUIRED)
+target_link_libraries(OSDependent Threads::Threads)
 
 if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
     install(TARGETS OSDependent EXPORT glslang-targets)
@@ -60,7 +48,7 @@
         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\")
+            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
         endif()
 
         add_library(OSDependent ALIAS glslang::OSDependent)
diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp
index b98df93..9a31a9a 100644
--- a/glslang/OSDependent/Unix/ossource.cpp
+++ b/glslang/OSDependent/Unix/ossource.cpp
@@ -76,7 +76,7 @@
     //
     // Create global pool key.
     //
-    if ((pthread_key_create(&pPoolIndex, NULL)) != 0) {
+    if ((pthread_key_create(&pPoolIndex, nullptr)) != 0) {
         assert(0 && "OS_AllocTLSIndex(): Unable to allocate Thread Local Storage");
         return OS_INVALID_TLS_INDEX;
     }
diff --git a/glslang/OSDependent/Web/glslang.js.cpp b/glslang/OSDependent/Web/glslang.js.cpp
index f2306a6..c820da6 100644
--- a/glslang/OSDependent/Web/glslang.js.cpp
+++ b/glslang/OSDependent/Web/glslang.js.cpp
@@ -141,6 +141,15 @@
     /* .maxTaskWorkGroupSizeY_NV = */ 1,
     /* .maxTaskWorkGroupSizeZ_NV = */ 1,
     /* .maxMeshViewCountNV = */ 4,
+    /* .maxMeshOutputVerticesEXT = */ 256,
+    /* .maxMeshOutputPrimitivesEXT = */ 512,
+    /* .maxMeshWorkGroupSizeX_EXT = */ 32,
+    /* .maxMeshWorkGroupSizeY_EXT = */ 1,
+    /* .maxMeshWorkGroupSizeZ_EXT = */ 1,
+    /* .maxTaskWorkGroupSizeX_EXT = */ 32,
+    /* .maxTaskWorkGroupSizeY_EXT = */ 1,
+    /* .maxTaskWorkGroupSizeZ_EXT = */ 1,
+    /* .maxMeshViewCountEXT = */ 4,
     /* .maxDualSourceDrawBuffersEXT = */ 1,
 
     /* .limits = */ {
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index 6048bb8..882133a 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -55,7 +55,7 @@
         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\")
+            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
         endif()
 
         add_library(OSDependent ALIAS glslang::OSDependent)
diff --git a/glslang/OSDependent/Windows/ossource.cpp b/glslang/OSDependent/Windows/ossource.cpp
index 870840c..fa372a2 100644
--- a/glslang/OSDependent/Windows/ossource.cpp
+++ b/glslang/OSDependent/Windows/ossource.cpp
@@ -113,7 +113,7 @@
 
 void InitGlobalLock()
 {
-    GlobalLock = CreateMutex(0, false, 0);
+    GlobalLock = CreateMutex(nullptr, false, nullptr);
 }
 
 void GetGlobalLock()
@@ -128,7 +128,7 @@
 
 unsigned int __stdcall EnterGenericThread (void* entry)
 {
-    return ((TThreadEntrypoint)entry)(0);
+    return ((TThreadEntrypoint)entry)(nullptr);
 }
 
 //#define DUMP_COUNTERS
diff --git a/glslang/OSDependent/osinclude.h b/glslang/OSDependent/osinclude.h
index fcfeff2..7eaa113 100644
--- a/glslang/OSDependent/osinclude.h
+++ b/glslang/OSDependent/osinclude.h
@@ -41,7 +41,7 @@
 // Thread Local Storage Operations
 //
 typedef void* OS_TLSIndex;
-#define OS_INVALID_TLS_INDEX ((void*)0)
+#define OS_INVALID_TLS_INDEX nullptr
 
 OS_TLSIndex OS_AllocTLSIndex();
 bool        OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue);
diff --git a/StandAlone/ResourceLimits.h b/glslang/Public/ResourceLimits.h
similarity index 90%
rename from StandAlone/ResourceLimits.h
rename to glslang/Public/ResourceLimits.h
index 736248e..f70be81 100644
--- a/StandAlone/ResourceLimits.h
+++ b/glslang/Public/ResourceLimits.h
@@ -37,14 +37,16 @@
 
 #include <string>
 
-#include "../glslang/Include/ResourceLimits.h"
+#include "../Include/ResourceLimits.h"
 
-namespace glslang {
+// Return pointer to user-writable Resource to pass through API in
+// future-proof way.
+extern TBuiltInResource* GetResources();
 
 // These are the default resources for TBuiltInResources, used for both
 //  - parsing this string for the case where the user didn't supply one,
 //  - dumping out a template for user construction of a config file.
-extern const TBuiltInResource DefaultTBuiltInResource;
+extern const TBuiltInResource* GetDefaultResources();
 
 // Returns the DefaultTBuiltInResource as a human-readable string.
 std::string GetDefaultTBuiltInResourceString();
@@ -52,6 +54,4 @@
 // Decodes the resource limits from |config| to |resources|.
 void DecodeResourceLimits(TBuiltInResource* resources, char* config);
 
-}  // end namespace glslang
-
 #endif  // _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 78dd323..90a5302 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -728,7 +728,7 @@
     TShader& operator=(TShader&);
 };
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
 //
 // A reflection database and its interface, consistent with the OpenGL API reflection queries.
@@ -846,7 +846,7 @@
     virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0;
 };
 
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
 // Make one TProgram per set of shaders that will get linked together.  Add all
 // the shaders that are to be linked together.  After calling shader.parse()
@@ -867,7 +867,7 @@
 
     TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; }
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
 
     // Reflection Interface
 
@@ -961,7 +961,7 @@
     // If resolver is not provided it uses the previous approach
     // and respects auto assignment and offsets.
     GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr);
-#endif // !GLSLANG_WEB && !GLSLANG_ANGLE
+#endif // !GLSLANG_WEB
 
 protected:
     GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages);
@@ -972,7 +972,7 @@
     TIntermediate* intermediate[EShLangCount];
     bool newedIntermediate[EShLangCount];      // track which intermediate were "new" versus reusing a singleton unit in a stage
     TInfoSink* infoSink;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
     TReflection* reflection;
 #endif
     bool linked;
diff --git a/StandAlone/resource_limits_c.h b/glslang/Public/resource_limits_c.h
similarity index 92%
rename from StandAlone/resource_limits_c.h
rename to glslang/Public/resource_limits_c.h
index 108fd5e..05aa8eb 100644
--- a/StandAlone/resource_limits_c.h
+++ b/glslang/Public/resource_limits_c.h
@@ -29,12 +29,15 @@
 #ifndef _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
 #define _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
 
-#include "../glslang/Include/glslang_c_interface.h"
+#include "../Include/glslang_c_interface.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+// Returns a struct that can be use to create custom resource values.
+glslang_resource_t* glslang_resource(void);
+
 // These are the default resources for TBuiltInResources, used for both
 //  - parsing this string for the case where the user didn't supply one,
 //  - dumping out a template for user construction of a config file.
diff --git a/StandAlone/ResourceLimits.cpp b/glslang/ResourceLimits/ResourceLimits.cpp
similarity index 98%
rename from StandAlone/ResourceLimits.cpp
rename to glslang/ResourceLimits/ResourceLimits.cpp
index 1a76bf6..0e9d1b5 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/glslang/ResourceLimits/ResourceLimits.cpp
@@ -37,9 +37,9 @@
 #include <sstream>
 #include <cctype>
 
-#include "ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
 
-namespace glslang {
+TBuiltInResource Resources;
 
 const TBuiltInResource DefaultTBuiltInResource = {
     /* .MaxLights = */ 32,
@@ -505,6 +505,8 @@
             resources->maxTaskWorkGroupSizeZ_EXT = value;
         else if (tokenStr == "MaxMeshViewCountEXT")
             resources->maxMeshViewCountEXT = value;
+        else if (tokenStr == "MaxDualSourceDrawBuffersEXT")
+            resources->maxDualSourceDrawBuffersEXT = value;
         else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
         else if (tokenStr == "whileLoops")
@@ -529,4 +531,12 @@
     }
 }
 
-}  // end namespace glslang
+TBuiltInResource* GetResources()
+{
+   return &Resources;
+}
+
+const TBuiltInResource* GetDefaultResources()
+{
+    return &DefaultTBuiltInResource;
+}
diff --git a/StandAlone/resource_limits_c.cpp b/glslang/ResourceLimits/resource_limits_c.cpp
similarity index 82%
rename from StandAlone/resource_limits_c.cpp
rename to glslang/ResourceLimits/resource_limits_c.cpp
index a1f681c..0eeac23 100644
--- a/StandAlone/resource_limits_c.cpp
+++ b/glslang/ResourceLimits/resource_limits_c.cpp
@@ -26,15 +26,20 @@
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 **/
 
-#include "resource_limits_c.h"
-#include "ResourceLimits.h"
+#include "glslang/Public/resource_limits_c.h"
+#include "glslang/Public/ResourceLimits.h"
 #include <stdlib.h>
 #include <string.h>
 #include <string>
 
+glslang_resource_t* glslang_resource(void)
+{
+    return reinterpret_cast<glslang_resource_t*>(GetResources());
+}
+
 const glslang_resource_t* glslang_default_resource(void)
 {
-    return reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource);
+    return reinterpret_cast<const glslang_resource_t*>(GetDefaultResources());
 }
 
 #if defined(__clang__) || defined(__GNUC__)
@@ -47,7 +52,7 @@
 
 const char* glslang_default_resource_string()
 {
-    std::string cpp_str = glslang::GetDefaultTBuiltInResourceString();
+    std::string cpp_str = GetDefaultTBuiltInResourceString();
     char* c_str = (char*)malloc(cpp_str.length() + 1);
     strcpy(c_str, cpp_str.c_str());
     return c_str;
@@ -61,5 +66,5 @@
 
 void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)
 {
-    glslang::DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
+    DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
 }
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 1d97546..12e0137 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -211,6 +211,7 @@
         "runtimeArray.vert",
         "simpleFunctionCall.frag",
         "stringToDouble.vert",
+        "struct.error.frag",
         "structAssignment.frag",
         "structDeref.frag",
         "structure.frag",
@@ -291,6 +292,7 @@
         "GL_EXT_shader_integer_mix.vert",
         "GL_ARB_draw_instanced.vert",
         "GL_ARB_fragment_coord_conventions.vert",
+        "GL_ARB_bindless_texture.frag",
         "BestMatchFunction.vert",
         "EndStreamPrimitive.geom",
         "floatBitsToInt.vert",
diff --git a/gtests/BuiltInResource.FromFile.cpp b/gtests/BuiltInResource.FromFile.cpp
index da81fe9..eeea511 100644
--- a/gtests/BuiltInResource.FromFile.cpp
+++ b/gtests/BuiltInResource.FromFile.cpp
@@ -36,7 +36,7 @@
 
 #include <gtest/gtest.h>
 
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
 #include "TestFixture.h"
 
 namespace glslangtest {
@@ -49,9 +49,19 @@
     const std::string path = GlobalTestSettings.testRoot + "/baseResults/test.conf";
     std::string expectedConfig;
     tryLoadFile(path, "expected resource limit", &expectedConfig);
-    const std::string realConfig = glslang::GetDefaultTBuiltInResourceString();
+    const std::string realConfig = GetDefaultTBuiltInResourceString();
     ASSERT_EQ(expectedConfig, realConfig);
 }
 
+TEST_F(DefaultResourceTest, UnrecognizedLimit)
+{
+    const std::string defaultConfig = GetDefaultTBuiltInResourceString();
+    testing::internal::CaptureStdout();
+    TBuiltInResource resources;
+    DecodeResourceLimits(&resources, const_cast<char*>(defaultConfig.c_str()));
+    std::string output = testing::internal::GetCapturedStdout();
+    ASSERT_EQ(output.find("unrecognized limit"), std::string::npos);
+}
+
 }  // anonymous namespace
 }  // namespace glslangtest
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index 8dff7ed..408a92d 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -76,7 +76,7 @@
                 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\")
+                    include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
                 endif()
 
                 add_library(glslangtests ALIAS glslang::glslangtests)
diff --git a/gtests/Config.FromFile.cpp b/gtests/Config.FromFile.cpp
index dd18c13..05107e7 100644
--- a/gtests/Config.FromFile.cpp
+++ b/gtests/Config.FromFile.cpp
@@ -32,7 +32,7 @@
 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
 #include "TestFixture.h"
 
 namespace glslangtest {
@@ -65,7 +65,7 @@
         char* configChars = new char[len + 1];
         memcpy(configChars, configContents.data(), len);
         configChars[len] = 0;
-        glslang::DecodeResourceLimits(&resources, configChars);
+        DecodeResourceLimits(&resources, configChars);
         delete[] configChars;
     }
 
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 5974257..db882fe 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -205,6 +205,7 @@
         {"hlsl.earlydepthstencil.frag", "main"},
         {"hlsl.emptystructreturn.frag", "main"},
         {"hlsl.emptystructreturn.vert", "main"},
+        {"hlsl.emptystructreturn.tesc", "main"},
         {"hlsl.emptystruct.init.vert", "main"},
         {"hlsl.entry-in.frag", "PixelShaderFunction"},
         {"hlsl.entry-out.frag", "PixelShaderFunction"},
@@ -312,6 +313,7 @@
         {"hlsl.matrixindex.frag", "main"},
         {"hlsl.nonstaticMemberFunction.frag", "main"},
         {"hlsl.numericsuffixes.frag", "main"},
+        {"hlsl.numericsuffixes.negative.frag", "main"},
         {"hlsl.numthreads.comp", "main_aux2"},
         {"hlsl.overload.frag", "PixelShaderFunction"},
         {"hlsl.opaque-type-bug.frag", "main"},
@@ -402,6 +404,7 @@
         {"hlsl.structbuffer.rw.frag", "main"},
         {"hlsl.structbuffer.rwbyte.frag", "main"},
         {"hlsl.structbuffer.rwbyte2.comp", "main"},
+        {"hlsl.structcopy.comp", "main"},
         {"hlsl.structin.vert", "main"},
         {"hlsl.structIoFourWay.frag", "main"},
         {"hlsl.structStructName.frag", "main"},
@@ -417,6 +420,7 @@
         {"hlsl.matType.bool.frag", "main"},
         {"hlsl.matType.int.frag", "main"},
         {"hlsl.max.frag", "PixelShaderFunction"},
+        {"hlsl.nested-runtimeArray.frag", "main"},
         {"hlsl.preprocessor.frag", "main"},
         {"hlsl.precedence.frag", "PixelShaderFunction"},
         {"hlsl.precedence2.frag", "PixelShaderFunction"},
@@ -471,7 +475,8 @@
 INSTANTIATE_TEST_SUITE_P(
     ToSpirv, HlslSpv1_6CompileTest,
     ::testing::ValuesIn(std::vector<FileNameEntryPointPair>{
-       {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"}
+       {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"},
+       {"hlsl.structcopylogical.comp","main"},
     }),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
index 4db71c2..6015c33 100644
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -75,7 +75,7 @@
     result.linkingOutput = program.getInfoLog();
     result.linkingError = program.getInfoDebugLog();
 
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         if (success)
             program.mapIO();
 #endif
diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp
index 9e029fc..3b769bb 100644
--- a/gtests/Link.FromFile.cpp
+++ b/gtests/Link.FromFile.cpp
@@ -90,6 +90,9 @@
     Glsl, LinkTest,
     ::testing::ValuesIn(std::vector<std::vector<std::string>>({
         {"mains1.frag", "mains2.frag", "noMain1.geom", "noMain2.geom"},
+        {"implicitArraySize.vert", "implicitArraySize.frag"},
+        {"implicitArraySizeBuiltin.vert", "implicitArraySizeBuiltin.geom"},
+        {"implicitArraySize1.geom", "implicitArraySize2.geom"},
         {"noMain.vert", "mains.frag"},
         {"link1.frag", "link2.frag", "link3.frag"},
         {"recurse1.vert", "recurse1.frag", "recurse2.frag"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index e1b7a25..2aee2d1 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -357,6 +357,12 @@
         "spv.discard-dce.frag",
         "spv.doWhileLoop.frag",
         "spv.earlyReturnDiscard.frag",
+        "spv.ext.ShaderTileImage.color.frag",
+        "spv.ext.ShaderTileImage.depth_stencil.frag",
+        "spv.ext.ShaderTileImage.subpassinput.frag",
+        "spv.ext.ShaderTileImage.typemismatch.frag",
+        "spv.ext.ShaderTileImage.overlap.frag",
+        "spv.ext.ShaderTileImage.wronglayout.frag",
         "spv.extPostDepthCoverage.frag",
         "spv.extPostDepthCoverage_Error.frag",
         "spv.float16convertonlyarith.comp",
@@ -384,12 +390,15 @@
         "spv.intOps.vert",
         "spv.intrinsicsSpirvByReference.vert",
         "spv.intrinsicsSpirvDecorate.frag",
+        "spv.intrinsicsSpirvDecorateId.comp",
+        "spv.intrinsicsSpirvDecorateString.comp",
         "spv.intrinsicsSpirvExecutionMode.frag",
         "spv.intrinsicsSpirvInstruction.vert",
         "spv.intrinsicsSpirvLiteral.vert",
         "spv.intrinsicsSpirvStorageClass.rchit",
         "spv.intrinsicsSpirvType.rgen",
         "spv.intrinsicsSpirvTypeLocalVar.vert",
+        "spv.intrinsicsSpirvTypeWithTypeSpecifier.vert",
         "spv.invariantAll.vert",
         "spv.layer.tese",
         "spv.layoutNested.vert",
@@ -441,6 +450,7 @@
         "spv.sparseTexture.frag",
         "spv.sparseTextureClamp.frag",
         "spv.structAssignment.frag",
+        "spv.structCopy.comp",
         "spv.structDeref.frag",
         "spv.structure.frag",
         "spv.switch.frag",
@@ -493,6 +503,8 @@
         "spv.samplerlessTextureFunctions.frag",
         "spv.smBuiltins.vert",
         "spv.smBuiltins.frag",
+        "spv.ARMCoreBuiltIns.vert",
+        "spv.ARMCoreBuiltIns.frag",
         "spv.builtin.PrimitiveShadingRateEXT.vert",
         "spv.builtin.ShadingRateEXT.frag",
         "spv.atomicAdd.bufferReference.comp",
@@ -650,6 +662,12 @@
         "spv.atomiAddEXT.task",
         "spv.460.subgroupEXT.task",
         "spv.460.subgroupEXT.mesh",
+
+        // SPV_NV_shader_execution_reorder
+
+        "spv.nv.hitobject-allops.rgen",
+        "spv.nv.hitobject-allops.rchit",
+        "spv.nv.hitobject-allops.rmiss",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -850,7 +868,8 @@
         "spv.debuginfo.glsl.comp",
         "spv.debuginfo.glsl.geom",
         "spv.debuginfo.glsl.tesc",
-        "spv.debuginfo.glsl.tese"
+        "spv.debuginfo.glsl.tese",
+        "spv.debuginfo.const_params.glsl.comp"
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index d087d6d..962855c 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -48,7 +48,7 @@
 #include "SPIRV/disassemble.h"
 #include "SPIRV/doc.h"
 #include "SPIRV/SPVRemapper.h"
-#include "StandAlone/ResourceLimits.h"
+#include "glslang/Public/ResourceLimits.h"
 #include "glslang/Public/ShaderLang.h"
 
 #include "Initializer.h"
@@ -199,7 +199,7 @@
             shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1);
         if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str());
         return shader->parse(
-                (resources ? resources : &glslang::DefaultTBuiltInResource),
+                (resources ? resources : GetDefaultResources()),
                 defaultVersion, isForwardCompatible, controls);
     }
 
@@ -254,7 +254,7 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         if (success)
             program.mapIO();
 #endif
@@ -318,7 +318,7 @@
         program.addShader(&shader);
         
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         if (success)
             program.mapIO();
 #endif
@@ -363,7 +363,7 @@
         glslang::TProgram program;
         program.addShader(&shader);
         success &= program.link(controls);
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#if !defined(GLSLANG_WEB)
         if (success)
             program.mapIO();
 #endif
@@ -471,7 +471,7 @@
             targetLanguageVersion, false, EShTexSampTransKeep, enableOptimizer, enableDebug,
             enableNonSemanticShaderDebugInfo, automap);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
@@ -501,7 +501,7 @@
         GlslangResult result = compileAndLink(testName, input, entryPointName, controls, clientTargetVersion,
             targetLanguageVersion, false, EShTexSampTransKeep, false, automap);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
@@ -527,7 +527,7 @@
         GlslangResult result = compileAndLink(testName, input, entryPointName, controls,
                                               glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, true);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
@@ -564,7 +564,7 @@
                                                 autoMapBindings,
                                                 flattenUniformArrays);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
@@ -591,7 +591,7 @@
         const EShMessages controls = DeriveOptions(source, semantics, target);
         GlslangResult result = compileLinkRemap(testName, input, entryPointName, controls, remapOptions);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
@@ -618,7 +618,7 @@
         const EShMessages controls = DeriveOptions(source, semantics, target);
         GlslangResult result = remap(testName, input, controls, remapOptions);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
@@ -640,7 +640,7 @@
         std::string ppShader;
         glslang::TShader::ForbidIncluder includer;
         const bool success = shader.preprocess(
-            &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile,
+            GetDefaultResources(), defaultVersion, defaultProfile,
             forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors),
             &ppShader, includer);
 
@@ -698,7 +698,7 @@
                                               glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, false,
                                               EShTexSampTransUpgradeTextureRemoveSampler);
 
-        // Generate the hybrid output in the way of glslangValidator.
+        // Generate the hybrid output in the way of glslang.
         std::ostringstream stream;
         outputResultToStream(&stream, result, controls);
 
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
index b34df3a..058a67b 100644
--- a/hlsl/CMakeLists.txt
+++ b/hlsl/CMakeLists.txt
@@ -38,8 +38,11 @@
 # projects that referenced this target.
 
 add_library(HLSL ${LIB_TYPE} "stub.cpp")
-set_property(TARGET HLSL PROPERTY FOLDER hlsl)
-set_property(TARGET HLSL PROPERTY POSITION_INDEPENDENT_CODE ON)
+set_target_properties(HLSL PROPERTIES
+    FOLDER hlsl
+    POSITION_INDEPENDENT_CODE ON
+    VERSION   "${GLSLANG_VERSION}"
+    SOVERSION "${GLSLANG_VERSION_MAJOR}")
 
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(HLSL PROPERTIES PREFIX "")
@@ -52,7 +55,7 @@
         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\")
+            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
         endif()
 
         add_library(HLSL ALIAS glslang::HLSL)
diff --git a/known_good.json b/known_good.json
index 5ee36a2..61645cb 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "eb0a36633d2acf4de82588504f951ad0f2cecacb"
+      "commit" : "4b6bd5a665ba0529747af3a0bc808732b7e78f48"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "85a1ed200d50660786c1a88d9166e871123cce39"
+      "commit" : "f1ba373ef03752ee9f6f2b898bea1213f93e1ef2"
     }
   ]
 }
diff --git a/kokoro/android-ndk-build/build-docker.sh b/kokoro/android-ndk-build/build-docker.sh
index 2b23b27..94edcd3 100755
--- a/kokoro/android-ndk-build/build-docker.sh
+++ b/kokoro/android-ndk-build/build-docker.sh
@@ -43,6 +43,7 @@
 
 export NDK_PROJECT_PATH="${ROOT_DIR}/ndk_test"
 export APP_BUILD_SCRIPT="${ROOT_DIR}/ndk_test/Android.mk"
+export APP_PLATFORM=android-24 # Vulkan introduced in API 24
 
 echo "Building..."
 ndk-build -j
diff --git a/kokoro/linux-clang-gn/build-docker.sh b/kokoro/linux-clang-gn/build-docker.sh
index 1035ab8..6540b1b 100755
--- a/kokoro/linux-clang-gn/build-docker.sh
+++ b/kokoro/linux-clang-gn/build-docker.sh
@@ -34,8 +34,17 @@
 # POSSIBILITY OF SUCH DAMAGE.
 
 set -e # Fail on any error.
+
+. /bin/using.sh # Declare the bash `using` function for configuring toolchains.
+
 set -x # Display commands being run.
 
+using ninja-1.10.0
+
+# Disable git's "detected dubious ownership" error - kokoro checks out the repo
+# with a different user, and we don't care about this warning.
+git config --global --add safe.directory '*'
+
 echo "Fetching external projects..."
 ./update_glslang_sources.py
 
diff --git a/kokoro/linux-clang-gn/build.sh b/kokoro/linux-clang-gn/build.sh
index 563432a..111f529 100755
--- a/kokoro/linux-clang-gn/build.sh
+++ b/kokoro/linux-clang-gn/build.sh
@@ -38,6 +38,7 @@
 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )"
 ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )"
 
+set +e # Allow build failure
 docker run --rm -i \
   --volume "${ROOT_DIR}:${ROOT_DIR}" \
   --workdir "${ROOT_DIR}" \
@@ -46,4 +47,9 @@
   --entrypoint "${SCRIPT_DIR}/build-docker.sh" \
   "gcr.io/shaderc-build/radial-build:latest"
 
+# This is important. If the permissions are not fixed, kokoro will fail
+# to pull build artifacts, and put the build in tool-failure state, which
+# blocks the logs.
+RESULT=$?
 sudo chown -R "$(id -u):$(id -g)" "${ROOT_DIR}"
+exit $RESULT
diff --git a/kokoro/linux-clang-release-bazel/build.sh b/kokoro/linux-clang-release-bazel/build.sh
deleted file mode 100644
index 190e3d7..0000000
--- a/kokoro/linux-clang-release-bazel/build.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Linux Build Script.
-
-# Fail on any error.
-set -e
-# Display commands being run.
-set -x
-
-CC=clang
-CXX=clang++
-SRC=$PWD/github/glslang
-cd $SRC
-
-# Bazel limitation: No 'External' directory is allowed!!
-mv External third_party
-
-gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-linux-x86_64 .
-chmod +x bazel-0.29.1-linux-x86_64
-
-echo $(date): Build everything...
-./bazel-0.29.1-linux-x86_64 build :all
-echo $(date): Build completed.
-
-echo $(date): Starting bazel test...
-./bazel-0.29.1-linux-x86_64 test :all --test_output=all
-echo $(date): Bazel test completed.
diff --git a/kokoro/linux-clang-release-bazel/continuous.cfg b/kokoro/linux-clang-release-bazel/continuous.cfg
deleted file mode 100644
index 767556d..0000000
--- a/kokoro/linux-clang-release-bazel/continuous.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Continuous build configuration.
-build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh"
diff --git a/kokoro/linux-clang-release-bazel/presubmit.cfg b/kokoro/linux-clang-release-bazel/presubmit.cfg
deleted file mode 100644
index 669491f..0000000
--- a/kokoro/linux-clang-release-bazel/presubmit.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Presubmit build configuration.
-build_file: "glslang/kokoro/linux-clang-release-bazel/build.sh"
diff --git a/kokoro/macos-clang-release-bazel/build.sh b/kokoro/macos-clang-release-bazel/build.sh
deleted file mode 100644
index 8f1b251..0000000
--- a/kokoro/macos-clang-release-bazel/build.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# macOS Build Script.
-
-# Fail on any error.
-set -e
-# Display commands being run.
-set -x
-
-CC=clang
-CXX=clang++
-SRC=$PWD/github/glslang
-cd $SRC
-
-mv External third_party
-
-# Get bazel 0.29.1.
-gsutil cp gs://bazel/0.29.1/release/bazel-0.29.1-darwin-x86_64 .
-chmod +x bazel-0.29.1-darwin-x86_64
-
-echo $(date): Build everything...
-./bazel-0.29.1-darwin-x86_64 build :all
-echo $(date): Build completed.
-
-echo $(date): Starting bazel test...
-./bazel-0.29.1-darwin-x86_64 test :all --test_output=all
-echo $(date): Bazel test completed.
diff --git a/kokoro/macos-clang-release-bazel/continuous.cfg b/kokoro/macos-clang-release-bazel/continuous.cfg
deleted file mode 100644
index f198079..0000000
--- a/kokoro/macos-clang-release-bazel/continuous.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Continuous build configuration.
-build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh"
diff --git a/kokoro/macos-clang-release-bazel/presubmit.cfg b/kokoro/macos-clang-release-bazel/presubmit.cfg
deleted file mode 100644
index daa30be..0000000
--- a/kokoro/macos-clang-release-bazel/presubmit.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Presubmit build configuration.
-build_file: "glslang/kokoro/macos-clang-release-bazel/build.sh"
diff --git a/kokoro/windows-msvc-2015-release-bazel/build.bat b/kokoro/windows-msvc-2015-release-bazel/build.bat
deleted file mode 100644
index fb2009b..0000000
--- a/kokoro/windows-msvc-2015-release-bazel/build.bat
+++ /dev/null
@@ -1,75 +0,0 @@
-:: Copyright (C) 2019 Google, Inc.
-::
-:: All rights reserved.
-::
-:: Redistribution and use in source and binary forms, with or without
-:: modification, are permitted provided that the following conditions
-:: are met:
-::
-::    Redistributions of source code must retain the above copyright
-::    notice, this list of conditions and the following disclaimer.
-::
-::    Redistributions in binary form must reproduce the above
-::    copyright notice, this list of conditions and the following
-::    disclaimer in the documentation and/or other materials provided
-::    with the distribution.
-::
-::    Neither the name of Google Inc. nor the names of its
-::    contributors may be used to endorse or promote products derived
-::    from this software without specific prior written permission.
-::
-:: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-:: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-:: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-:: FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-:: COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-:: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-:: BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-:: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-:: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-:: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-:: ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-:: POSSIBILITY OF SUCH DAMAGE.
-:: Copyright (c) 2019 Google LLC.
-::
-:: Windows Build Script.
-
-@echo on
-
-set SRC=%cd%\github\glslang
-
-:: Force usage of python 3.6
-set PATH=C:\python36;%PATH%
-cd %SRC%
-
-mv External third_party
-
-:: REM Install Bazel.
-wget -q https://github.com/bazelbuild/bazel/releases/download/0.29.1/bazel-0.29.1-windows-x86_64.zip
-unzip -q bazel-0.29.1-windows-x86_64.zip
-
-:: Set up MSVC
-call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
-set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio 14.0
-set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
-set BAZEL_SH=c:\tools\msys64\usr\bin\bash.exe
-set BAZEL_PYTHON=c:\tools\python2\python.exe
-
-:: #########################################
-:: Start building.
-:: #########################################
-echo "Build everything... %DATE% %TIME%"
-bazel.exe build :all
-if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
-echo "Build Completed %DATE% %TIME%"
-
-:: ##############
-:: Run the tests
-:: ##############
-echo "Running Tests... %DATE% %TIME%"
-bazel.exe test :all --test_output=all
-if %ERRORLEVEL% NEQ 0 exit /b %ERRORLEVEL%
-echo "Tests Completed %DATE% %TIME%"
-
-exit /b 0
-
diff --git a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg b/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
deleted file mode 100644
index 554d29d..0000000
--- a/kokoro/windows-msvc-2015-release-bazel/continuous.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Continuous build configuration.
-build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"
diff --git a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg b/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
deleted file mode 100644
index 4980bb6..0000000
--- a/kokoro/windows-msvc-2015-release-bazel/presubmit.cfg
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2019 Google, Inc.
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-#    Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-#
-#    Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials provided
-#    with the distribution.
-#
-#    Neither the name of Google Inc. nor the names of its
-#    contributors may be used to endorse or promote products derived
-#    from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Presubmit build configuration.
-build_file: "glslang/kokoro/windows-msvc-2015-release-bazel/build.bat"
diff --git a/ndk_test/jni/Application.mk b/ndk_test/jni/Application.mk
index 07b7615..0eb8ffd 100644
--- a/ndk_test/jni/Application.mk
+++ b/ndk_test/jni/Application.mk
@@ -34,5 +34,5 @@
 APP_ABI := all
 APP_BUILD_SCRIPT := Android.mk
 APP_STL := c++_static
-APP_PLATFORM := android-9
+APP_PLATFORM := android-24
 NDK_TOOLCHAIN_VERSION := 4.9